【发布时间】:2011-12-12 13:24:16
【问题描述】:
第一种方法
/\
/ \
V/ \ C <=WCF=> {Business Layer (with business logic) <=> ORM <=> Database}
/ \
--------
M
第二种方法
/\
/ \
V/ \ M <=WCF=> {Business Layer (with business logic) <=> ORM <=> Database}
/ \
--------
C
主要区别: - 在第一种方法中,业务对象将有 2 个版本。一个加载了业务层内的属性,另一个加载了几个视图特定属性的哑版本,由控制器填充。在第二种方法中,将有一个具有所有属性的类。 - 第一种方法似乎与表示层更加分离
在这两种方法中,控制器都是起点。
就我从不同人那里收到的观点而言,两者都是有效的方法,可以根据开发偏好进行切换。
请分享想法。
【问题讨论】:
-
看起来你的模型层在这两种情况下都没有做任何事情,更像是“查看模型”。我同意 alex - 你的模型应该包含你的业务逻辑。模型应包含与业务领域相关的信息和行为。
-
两者有什么区别? C 正在听 BL 或 M 正在听 BL。我建议创建包装 V & M 的 ViewModel (VM)。
-
MVC 是一个表示方面。如果我使用第一个选项,我可以在 MVC 或 Silverlight MVVM 或其他模式之间轻松切换,因为我的业务逻辑和核心域实体是完整的。模型在第二种方法中并不完全愚蠢。控制器只会实例化模型,而模型的构造器实际上会与业务层对话以获取用于填充自身的数据。
-
MVC 中的模型是您的 WCF 服务(或任何其他数据源)。这是事实。没有任何变化。您的第二种方法不是 MVC。
-
有趣的是,只有我能找到仍然喜欢方法 B 的人(正如他们所说的控制器应该是愚蠢的)来自 JAVA 世界......
标签: asp.net-mvc asp.net-mvc-3 model-view-controller