首先我想澄清一点,我是域驱动设计的新人物,而且我在问这个问题,因为我已经读过一些名为“无神域模型”的东西.

大多数时候,我在使用Repository模式时看到以下事情.

>我们有一个通用存储库
>我们有只包含一组公共属性的模型,但它不包含任何方法(所以根据DDD的定义成为贫血域模型),因为这里的存储库类处理该实体或模型的其他进程.

请为我的查询提供宝贵的答案.

让我澄清一些事情.

通用存储库是指由实体存储库实现的通用接口.

我的困惑是关于以下事情

例如:
假设我想保存

public class User
    {
        public int Id { get; set;}
        public string Name { get; set};
    }

    public class UserRepository : IRepository<User>  
    {  
        // All Operation Like Save / Get /  UserEntity (Domain Object)       
    }

所以这里是我的User类不做任何事情,而只是具有UserRespository的属性和其他操作句柄.所以我的用户是贫血域模型. (因为它没有具体)

在附图中我考虑了ProductRepository,所以我的问题是:我的产品类是一个贫血模型吗?

请考虑以下示例图像,我想说的话.

解决方法

我同意IRepository界面通常是浪费时间.如果我将基本的CRUD操作放在我的IRepository接口中,那么如何处理数据呢像审计数据呢?删除它将被禁止.当我尝试调用Delete()时,应该返回一个InvalidOperationException?

有些人提出了较小的界面,如可读,可写,可更新或IDeleteable.我认为这种做法甚至更加麻烦.

对于DDD,我喜欢使用每个存储库的接口(主要用于IoC和单元测试),而个人(这只是我自己的解决方案之后).这给了我IUserRepository,IAuditLogRepository等.我的存储库还采用(作为参数)并返回域实体(聚合根或单个实体).这样一来,DTO对象就不会维持或混乱我的解决方案.然而,我仍然使用视图模型来保护敏感数据不受我的观点影响.

有很多参数在线和反对存储库模式.

c# – 域驱动设计的存储库模式是否成为反模式?的更多相关文章

  1. php – 你会如何为这个应用程序建模?

    如果数据模型变得更复杂怎么办?所有这些都是你拥有域模型的原因,为什么它实际上是MVC的基本构建块:最终,用户拥有的心智模型将与数据模型不同步,原因有多种,我不会进入这里.关键是,它几乎总是发生.我确定这是必要的吗?我是否肯定这不仅仅是矫枉过正,一堆仪式咒语对于这么小的项目毫无意义?

  2. php – 将业务逻辑放在实体中

    我已经阅读了福勒关于“贫血领域模型”的文章(链接:http://www.martinfowler.com/bliki/AnemicDomainModel.html),我同意他的观点.我试图创建一个实体是简单POPO的应用程序,但是这样,我有一个胖服务层,而将一些逻辑放到实体中将是最简单的解决方案.所以我会有这样的架构:哪里:实体:将是简单的POPO,只是一袋二传手和吸气剂模型:将是用业务逻辑装饰的

  3. POCO,DTO,DLL和贫血域模型

    )),并由MartinFowler在07年由贫血领域模型出现。通过缺乏理解,我想我已经创造出了这些贫血域模型之一。所以通常我会这样创建一个dto:并将其传递给bll层,如下所示:这又反过来执行一些逻辑,并将其传递给dal层,如下所示:从我的理解,要使我的dto进入POCO,我需要使业务逻辑和行为(方法)成为对象的一部分。实现这一点的POCO方式是以这种方式设计你的界面:这是更可发现的,因为开发者知道在哪里寻找飞机飞行。

  4. java – 域模型映射器应该是静态的吗?

    在我参与的许多项目中,我们经常会有很多类将内容从一个域模型映射到另一个域模型.例如,从WSDL生成的模型到项目特定的模型.例如这也可以是一个非静态方法,服务层可以有一个映射器对象字段,而不是调用静态方法:我发现两种方法都使用了很多,但是:>以任何方式提高效率的解决方案之一?>任何解决方案都被认为是最佳实践吗?

  5. c# – 域驱动设计的存储库模式是否成为反模式?

    请考虑以下示例图像,我想说的话.解决方法我同意IRepository界面通常是浪费时间.如果我将基本的CRUD操作放在我的IRepository接口中,那么如何处理数据呢像审计数据呢?

  6. c# – MVVM中Model和ViewModel的澄清和命名约定

    我将城市模型作为POCO,然后对于城市列表,我将创建一个具有可观察的CityModel集合的Cityviewmodel.但那又怎样?我应该将Cityviewmodel作为CountryModel的一部分吗?也许是这样,有人可以澄清一下.这是我更加困惑的地方,因为我创建了一个具有属性Name,Location和List类型属性的CountryModel,但是我如何在MVVM中正确表示这一点?

  7. c# – 工厂模式这应该存在于DDD中?

    我已经讨论了一段时间了,但仍然没有得出结论.虽然我看到大多数示例都在应用程序层中有工厂代码,但我倾向于认为它应该在域层中.原因:我有时会在我的工厂进行初始验证,我希望所有对象的创建都能通过.我希望此代码可用于我的对象的所有实例化.有时,操作需要感觉不自然的参数信息传递给构造函数.还有一些不那么重要的原因.有没有理由说这是一种不好的做法?

  8. c# – 域模型中的域服务与实体方法

    我知道域和应用程序服务之间的区别.但是无法真正看到域实体和域服务中方法之间的区别:/我有一个游戏,有状态,玩家等等.它还有Addplayer,MoveLeft,Jump等方法.这些方法去哪儿了?鲍勃叔叔在他的文章here中写道:“一个实体可以是一个带有方法的对象,或者它可以是一组数据结构和功能.”我甚至不想提及像Move或Jump这样的方法也必须在AppServices中,在KOGameAPI中–因为UI需要这些方法.这是我的班级:那么,结束我的问题:域服务有哪些方法,域实体有哪些方法?

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部