当前位置: 首页 > 编程语言 > C#

如何从Repository中检索域对象分享

时间:2023-04-10 14:03:29 C#

如何从Repository中检索域对象我对repository域对象关系有一点了解。以下是我对域设计的一些了解(它们也可能是错误的或不准确的)。考虑到这一点,我找不到从存储库中获取域对象的方法。在DDD中,域名应该只知道并包含业务需要的内容,其他所有内容都必须从域中清除。没关系。此外,从任何企业抽象数据访问也是一种很好的做法。应用程序不需要知道我们在哪里存储数据或我们如何存储数据。我们只是要求存储库给我们一个领域对象,它给我们想要的对象,或者其他方式也是有效的,我们给存储库一个领域对象并将它发送到商店。在面向对象设计中,为域对象声明公共设置器也是一种非常糟糕的方法,因为我们无法控制谁访问什么和更改什么。因此,最好只显示对象外部需要的内容。因此,在我的脑海中,我找不到实现我的存储库的方法。我可以在我的代码中使用任何ORM或普通sql并检索数据。但是我不能从持久对象创建域对象;因为他们没有公共设置器,所以我无法创建和设置字段值。声明一个包含所有字段的公共构造函数似乎是不正确的。我可能有几个模型要填充,这意味着我必须定义几个具有不同参数集的构造函数。任何帮助将不胜感激...您有以下选择:1.ORM可以使用私有字段。据我所知,ORM(例如实体框架、NHibernate)可以通过非公共设置器设置属性。有一个例子可以证明它适用于实体框架——实体框架、私有构造函数和私有主体。如果你使用NHibernate,你的setter应该是public/protectedvirtual/protectedinternalvirtual或者可以使用私有的支持字段。您可以在NHibernateSO问题属性访问策略中找到更多信息。2.可以使用反射。它还可以用于访问私有字段/属性。可以通过反射设置私有属性。3.使用公共构造函数来构建实体并不是一个坏习惯。声明一个包含所有字段的公共构造函数似乎是不正确的。我可能有几个模型要填充,这意味着我必须定义几个具有不同参数集的构造函数。您的域实体只需要一个具有完整属性列表的公共构造函数。尽管要填充多个模型,但只需要一个构造函数就足够了。存储库负责调用构造函数并将模型映射到它的参数中。编辑:4.可以使用Automapper。以下测试表明AutoMapper可以通过私有设置器映射属性。[TestClass]publicclassAutomapperTest{[TestMethod]publicvoidTest(){//安排Mapper.CreateMap();varmodel=newAModel{Value=100};//actvarentity=Mapper.Map(model);//断言entity.Value.Should().Be(100);entity.Value.Should().Be(model.Value);}}publicclassAModel{publicintValue{get;放;}}publicclassA{publicintValue{get;私有集;如果ORM没有公共设置器,则无法创建域对象。如果您使用实体框架,它肯定可以在模型优先方法中映射私有属性,您只需要在代码优先方法中使用公共getter。我不知道其他ORM-s怎么样。我想在这里了解您的查询。关于如何进行的一些提示。首先,域应该知道存储库合同而不是实际的存储库基础结构。换句话说,你可以选择有3个类库如下:XYZDomain(会知道XYZRepository并调用该接口的相应方法)XYZRepository(包含接口IXYZService接口)XYZSQLRepository(XYZRepository接口的实际实现)。您现在可以选择使用依赖注入将XYZSQLRepository注入XYZDomain的位置。如果需要,您还可以尝试使用事件模型来注册这些存储库。使用自定义服务定位器获取特定对象以上是C#学习教程:如何从存储库中检索领域对象共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多加关注——本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: