我使用NHibernate来坚持我的域对象。 为了保持简单,我使用ASP.NET MVC项目作为我的表示层和我的服务层。 我想从我的控制器类返回我的域对象的XML。 在阅读堆栈溢出的一些post后,我收集DTOs是要走的路。 不过,我也遇到过有关ViewModel的post。 我的问题是:数据传输对象和ViewModel是一样的东西? 或者是ViewModel是DTO的一种子模式?
我目前有一个数据库中的每个表的存储库,并希望进一步调整自己与DDD通过减less它们只聚合根。 假设我有以下表格, User和Phone 。 每个用户可能有一个或多个电话。 没有聚合根的概念,我可能会这样做: //assuming I have the userId in session for example and I want to update a phone number List<Phone> phones = PhoneRepository.GetPhoneNumberByUserId(userId); phones[0].Number = “911”; PhoneRepository.Update(phones[0]); 聚合根的概念在纸上比在实践中更容易理解。 我永远不会有不属于用户的电话号码,那么废除PhoneRepository并将与Phone相关的方法合并到UserRepository中是否合理呢? 假设答案是肯定的,我将重写之前的代码示例。 我允许在UserRepository上有返回电话号码的方法吗? 或者它应该总是返回一个用户的引用,然后通过用户遍历关系来获得电话号码: List<Phone> phones = UserRepository.GetPhoneNumbers(userId); // Or User user = UserRepository.GetUserWithPhoneNumbers(userId); //this method will join to Phone 不pipe我以哪种方式获得手机,假设我修改了其中一个,我该如何去更新它们? 我有限的理解是根源下的对象应该通过根来更新,这将引导我select下面的select#1。 尽pipeEntity […]
互联网上使用ViewModel和利用Automapper的每篇文章都给出了“Controller – > View”方向映射的指导原则。 您将域模型和所有select列表一起放入一个专门的ViewModel中,并将其传递给视图。 这很清楚,很好。 该视图有一个表单,最终我们在POST操作中。 在这里,所有的模型绑定器都与[明显]另一个 View模型一起出现,它至less在命名约定的部分中与原始ViewModel 明显相关,以便进行绑定和validation。 你如何将其映射到你的域模型? 让它成为插入动作,我们可以使用相同的Automapper。 但是,如果这是更新行为呢? 我们必须从Repository检索我们的Domain Entity,根据ViewModel中的值更新它的属性并保存到Repository中。 附录1(2010年2月9日):有时,分配模型的属性是不够的。 根据视图模型的值,应该对域模型采取一些行动。 也就是说,应该在域模型上调用一些方法。 可能应该有一种应用程序服务层,站在控制器和域之间来处理视图模型… 如何组织这个代码,并把它放在哪里来实现以下目标? 保持控制器很薄 尊重SoC的实践 遵循域驱动devise原则 是干的 未完待续 …
在域驱动devise中,似乎有很多 协议 ,实体不应该直接访问存储库。 这是Eric Evans 领域驱动devise书籍,还是来自其他地方? 它背后的理由在哪里有一些很好的解释? 编辑:澄清:我不是在谈论经典的OO实践,将数据访问从业务逻辑分离到一个单独的层 – 我正在谈论的具体安排,在DDD中,实体不应该与数据交谈访问层(即它们不应该保存对Repository对象的引用) 更新:我给了BacceSR赏金,因为他的答案看起来最接近,但我对这件事还是很了解。 如果这样一个重要的原则,应该有一些关于它在网上的好文章,当然? 更新:2013年3月,关于这个问题的提问意味着对此有很多兴趣,即使有很多答案,我仍然认为如果人们有这个想法,还有更多的空间。
数据访问对象(DAO)和存储库模式有什么区别? 我正在开发一个使用Enterprise Java Bean(EJB3),Hibernate ORM作为基础结构的应用程序,以及作为devise技术的领域驱动devise(DDD)和testing驱动开发(TDD)。
我曾经看过一些书(例如编程entity framework代码第一个Julia Lerman )定义了他们的领域类(POCO),没有像以下导航属性的初始化: public class User { public int Id { get; set; } public string UserName { get; set; } public virtual ICollection<Address> Address { get; set; } public virtual License License { get; set; } } 一些其他书籍或工具(例如Entity Framework Power Tools )在生成POCO时会初始化该类的导航属性,如: public class User { public User() { this.Addresses = new IList<Address>(); […]