【发布时间】:2011-03-16 20:54:14
【问题描述】:
我需要将 MVC 项目中的 ViewModel 与位于单独库中的业务模型(数据访问层)分开。
假设我在单独的库中有数据库访问层类。我们的主要项目 (MVC) 对这些类一无所知,它们通过接口相互通信。使用 IOC 和使用 Ninject 解决依赖注入很容易,对吧?
现在 DataAccessLayer 包含名为 Car 的类,具有 Engine 和 Wheel 属性。在我的 MVC 项目中(它对 DataAccessLayer 及其类一无所知)我需要使用一些 Car 对象。所以我有另一个 Car 类(它只是一个纯 ViewModel),它具有相同的属性 - Engine 和 Wheel(当然在实际应用中,model 和 viewmodel 之间会有一些差异,为了简单起见我们忽略它)
IDataAccessLayer 接口有一个名为 IEnumerable GetAllCars() 的方法,它返回 DataAccessLayer.Car 对象的列表。 现在我需要创建 MVCProject.Car 集合,遍历 GetAllCars() 返回的 IEnumerable,在每次迭代中我需要创建一个新的 MVCProject.Car 对象,填充 Engine 和 Wheel 属性,最后将该对象添加到集合中。
所以:每次我必须创建几乎相同的结构并以某种方式在不同的地方管理它们。
这就是问题所在,明白了吗?或者不是?我觉得如果我不改变它,它最终会变得一团糟。不要重复自己违反原则的行为。请告诉我如何使它正确。使用我不知道的代理或原型或其他一些我很烂的设计模式。或者像 Ninject(我只知道如何将其用作 IOC 容器)或 Automapper 之类的工具,我可能会比设计模式更糟糕。
【问题讨论】:
-
你不烂...至少你在考虑设计模式:-)
-
请更改标题以表明您的问题。
-
@David:阿门那个兄弟!
-
David Archer 或“你不烂……你在考虑 设计模式”:-/
-
@marcind.. 我应该在最后加上问号吗? :)
标签: c# design-patterns architecture asp.net-mvc-3 dependency-injection