[英]Domain Object in Views
我们一直在讨论是否在我们的视图中使用域对象(asp.net mvc 2),还是应该将每个需要数据的视图发送到ViewModel?
我想知道是否有人在这个问题上有任何利弊,他们可以阐明一些问题?
谢谢
我喜欢将我的域对象与我的视图隔离开来。 就我而言,我的域对象仅用于表示应用程序的域,现在是如何显示应用程序。
表示层不应包含任何域逻辑。 他们展示的所有东西都应该由他们的控制器预先确定。 始终坚持的理想方法是确保视图仅接收这些展平的ViewModel。
我自己也问过类似的问题 。 这是我接受的答案的引用:
我认为在域中使用不同于设计层的设计是有优点的。 因此,从概念上讲,您实际上在查看两个不同的模型,一个用于域层,另一个用于表示层。 每个模型都针对其目的进行了优化 。
如果我有Customer
> Sales
> Dispatch Address
的域对象,那么我不想在视图中处理对象遍历。 我创建了一个包含所有属性的展平视图模型。 如果您使用优秀的开源项目AutoMapper,那么在这种展平视图/演示模型的映射中几乎没有额外的工作。
另外,如果您可以创建该模型的优化表示,为什么还要将整个域对象传递回视图?
如果您使用NHibernate或类似的 - 您的域对象很可能是代理,序列化这些dun工作。 您应始终使用ViewModel并将域对象映射到viewmodel中的DTO。 不要在这里走捷径。 制定惯例将减轻您以后遭受的痛苦。
出于某种原因,这是一种标准模式。
女://
这取决于。 在某些情况下,使用模型类的实例会很好。 在其他情况下,单独的ViewModel是更好的选择。 根据我的经验,在您的域和视图中使用不同的模型是完全可以接受的。 或者在视图中使用域模型。 做最适合你的事情。 为每个选项做一个高峰,看看哪些有效,然后决定。 您甚至可以为每个视图(和/或部分)选择不同的选项。
肯定会有简单的小应用程序,可以在所有层中使用相同的模型。 通常是数据应用程序的小形式。 但对于一个合适的域,我对这个主题的想法是保持域模型和视图模型分离,因为你不希望它们在更改时相互影响。
如果域逻辑需要一个小的更改来处理后端的一些新业务逻辑,那么您不希望冒险改变您的视图。 相反,如果市场营销或某人想要对视图进行更改,您不希望这些更改泄漏回您的域(必须填充字段并维护数据,除了某个视图某个地方将要使用它之外)。
我目前有一个很好的比较,因为我正在使用不同的方法开展两个项目。 我不是说“这很糟糕,这很好”,因为这是用一些模式写的。 我知道模式,我喜欢模式,但我从不盲目地跟随它们只是为了正确。 我总是使用我目前需要的东西来实现目前的目标。
在第一个应用程序中,在视图中使用域对象,开发非常快。 在少数地方几乎没有变化,你有额外的属性,表格输入等。你不打扰层,只是扩展/更改代码,并转移到另一个问题。
在第二个应用程序中,这里总是存在对象,在那里和其他地方,有几十个类看起来相同,做同样的事情,并且在不同版本的相同对象之间有大量的转换代码。 更糟糕的是,一些开发人员在“这个版本”的类上做了一些逻辑,其他逻辑在“那个版本”上完成。 开发非常痛苦,之后需要进行大量测试。 改变一个简单的东西需要很多关注,需要改变很多代码。 我真的不喜欢这个应用程序,因为我从未见过这种方法的商业利益,至少在去年(我们从一年开始处于生产阶段)。 这个应用程序的开发和维护成本比第一个高出四到四倍。
所以,我对这个问题的有趣回答是:这取决于。 如果你在10-20人的团队中工作,你喜欢上班,喝几个coffies,和朋友聊天,做一些简单的事情并回家,很多中间对象和转换代码对你有好处。 如果您的目标是快速和便宜,如果您想专注于业务层,新功能,快速更改跟随,以及更多,如果您触摸软件业务并希望兑现您的项目(我们做所有这些东西最终出售,对吧?),第二种方法可能会更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.