我正在尝试使用SimpleInjector创建我的存储库并在业务逻辑层中使用它(我也想使用PerWebRequest方法)。在DAL层我有:publicinterfaceIRepositorywhereT:class{voidAdd(Tentity);voidDelete(Tentity);voidDelete(intid);voidUpdate(Tentity);TGetById(intId);IQueryableAll();IEnumerableFind(Funcpredicate);}和:publicclassEFRepository:IRepository,IDisposabl
我正在尝试使用EntityFramework4遵循DDD存储库模式。但是我在保存对聚合根的集合属性的更改时遇到了问题。考虑我下面的类(class)。Item是我的聚合根,其中包含SubItem实体的集合。publicclassItem{publicintItemId{get;set;}publicstringName{get;set;}publicICollectionSubItems{get;privateset;}publicItem(){this.SubItems=newHashSet();}}publicclassSubItem{publicintItemId{get;set;
我很难理解我的工厂类在我的DDD项目中应该做什么。是的,工厂应该用于创建对象,但它究竟应该做什么。考虑以下工厂类:publicclassProductFactory{privatestaticIProductRepository_repository;publicstaticProductCreateProduct(){returnnewProduct();}publicstaticProductCreateProduct(){//Whatelsewouldgohere?}publicstaticProductGetProductById(intproductId){//Shouldi
我有以下数据库模型:**Persontable**ID|Name|StateId------------------------------1Joe12Peter13John2**Statetable**ID|Desc------------------------------1Working2Vacation领域模型将是(简化的):publicclassPerson{publicintId{get;}publicstringName{get;set;}publicStateState{get;set;}}publicclassState{privateintid;publicstri
我正在从事我的第一个DDD项目,我想我了解实体、数据访问对象及其关系的基本角色。我有一个基本的验证实现,它存储每个验证规则及其关联的实体。这适用于仅适用于当前实体的规则,但在需要其他数据时会分崩离析。例如,如果我有用户名必须是唯一的限制,我希望IsValid()调用在存在具有当前名称的现有用户时返回false。但是,我没有找到任何干净的方法来将此验证规则保留在实体本身上。我想在实体上有一个IsNameUnique函数,但大多数解决方案都需要我注入(inject)一个用户数据访问对象。这个逻辑应该在外部服务中吗?如果是这样,我如何仍然保持实体本身的逻辑?或者这是应该在用户实体之外的东西?
我有一个类在其构造函数中采用IRepository,如下所示......publicclassUserService{publicIRepository_repo{get;set;}publicUserService(IRepositoryrepo=null){_repo=repo??newUserRepository();}并且有一个看起来像这样的方法......publicboolIsUserActive(emailstring){//Themethodactuallydoesmorebuttokeepitsimpleletsimagine//itdoesthisUseruser=
问这个问题的原因是我一直想知道如何将所有这些不同的概念拼接在一起。有很多关于DDD、依赖注入(inject)、CQRS、SOA、MVC的示例和讨论,但关于如何以灵活的方式将它们组合在一起的示例并不多。我的目标:开发无需修改或无需修改即可独立运行的模块更改或重新设计UI应该尽可能简单(即UI应该尽可能少做,并且“愚蠢”使用记录在案的模式和原则为了更容易提出具体问题,主要架构现在看起来像这样:该示例显示了如何向员工添加备注。员工管理是一种有界上下文。员工有几个属性,其中一个ICollection.绑定(bind)上下文在我的理解中,分离代码的逻辑位置。每个BC都是一个模块。大多数时候,我发
假设我有publicclassProduct:Entity{publicIListItems{get;set;}}假设我想找到一个最大的项目...我可以添加方法Product.GetMaxItemSmth()并使用Linq(fromiinItemsselecti.smth).Max())或使用手动循环或其他方式。现在,问题是这会将整个集合加载到内存中。正确的解决方案是进行特定的数据库查询,但域实体无权访问存储库,对吧?所以要么我做productRepository.GetMaxItemSmth(product)(这很丑,不是吗?),或者即使实体可以访问存储库,我也使用来自实体的IPro
我正在尝试为EntityFrameworkCore2.0编写一个存储库方法,该方法可以使用.ThenInclude处理返回的子属性集合,但我在使用第二个表达式时遇到了问题。这是.Include的工作方法,它将返回实体的子属性(您提供lambda列表)。publicTGetSingle(Expression>predicate,paramsExpression>[]includeProperties){IQueryablequery=_context.Set();foreach(varincludePropertyinincludeProperties){query=query.Incl
学习DDD开发这几天,开始喜欢上了。我(认为我)了解DDD的原则,您的主要关注点是业务对象,您有聚合、聚合根、仅用于聚合根的存储库等等。我正在尝试创建一个将DDD开发与代码优先方法相结合的简单项目。我的问题是:(我正在使用asp.netMVC)DDD业务对象与CodeFirst对象不同吗?即使它们可能相同,例如我可以有一个包含所有规则和方法的Product业务对象,并且我可以先有一个Product代码(POCO)对象,它只包含我需要保存在数据库中的属性。如果问题1的答案是“真”,那么我如何通知ProductPOCO对象业务对象Product的属性已更改,并且我必须更新它吗?我正在使用“