1

这是情况:

  • 我有一个使用 BLL 项目的 Asp.Net 3.5 网站,该项目的对象类包含调用 DAL 的方法,这些方法调用存储过程(Oldschool)
  • 我正在使用相同的数据库和对象创建一个新网站(Asp.Net 4 和 MVC 3)。我还将添加一堆与现有类和表相关的类和新表(我猜是十几个)。

我的问题是:

我怎样才能让这一切一起工作。我真的很想在新项目中使用 MVC,并尽可能让所有工作正常。旧项目一团糟,但它太大了,我们不能碰它。

那么如何处理新对象呢?对类和存储过程使用相同的旧方法?为新对象和类创建存储库模式?ETC...

非常感谢

ps:我不知道我是否清楚,但如果需要,我可以给你任何其他细节。

ps2:我不是在寻找编码解决方案,而是在寻找实现顺利集成的最佳方法的一些迹象

4

2 回答 2

1

我目前正在完成一个有 EXACT 问题的项目的 DataAccess 层,这就是我解决它的方法:

我已经使用存储库模式来隔离我的“新代码”,使其不了解有关旧代码的任何信息。在存储库中,我使用对现有逻辑的调用来生成任何“遗留”实体并使用实体框架来管理任何新实体。一些实体需要对 CRUD 操作采用“组合”方法。例如,当我创建一个新的用户实体时,我需要从遗留系统中调用两个不同的对象,第一个返回我一个 PIN,我用它来调用另一个遗留对象以创建一个用户实例并返回一个 Id,而 Id 最终是与新的实体框架一起使用来管理对象的“newUser”部分。然后这个数据访问层暴露给 MVC 项目,该项目只知道新系统看到的实体,不知道底层的遗留结构是什么。因此,我们的 MVC 项目(甚至在我们的案例中甚至是业务逻辑层)只知道存储库,如果我们决定将遗留逻辑/CRUD 操作移动到新系统,除了实际的存储库之外什么都不会改变。在某些情况下,这会产生一些相当“庞大”的存储库(最复杂的是我提到的关于用户的存储库),但可以将新代码和遗留代码清晰地分开。

我知道这是在数据访问层中注入了一些业务逻辑,但是对于我们的项目,这是由于其他因素而故意选择的。如果需要,您可以让业务逻辑层调用遗留层。

希望这有帮助,如果不清楚,请告诉我,我会进一步解释,因为这里可能不像我头脑中那么清楚:)

于 2012-09-06T12:57:57.277 回答
0

无需使用存储库模式、EF 或 DI 即可使用 MVC。如果您的 BLL 是您用来获取业务对象(CRUD 操作)的工具,那么您没有理由不能直接在控制器中使用它。

至于添加新的类/表,这取决于 BLL 的耦合程度。如果它使用接口松散耦合,那么您应该可以为某些 DAO 使用不同的模式,但如果 DAO 直接相互引用,那么它可能会更麻烦。

如果您加倍努力,我想说一个好的第一步是在接口中定义您的 CRUD 操作(如果还没有接口)并让您的 BLL 类实现它们,这样您就可以使用 DI 并在你确实切换到不同的深度学习策略。

于 2012-09-06T12:58:42.563 回答