在OOP设计模式中,存储库模式和服务层之间有什么区别?
我正在开发一个ASP.NET MVC 3应用程序,我正在尝试理解这些设计模式,但我的大脑却没有得到它......
在使用Entity Framework代码优先创建数据库时,可以从代码中提取许多数据库模型.Fluent API和/或Attributes可用于微调模型.
与数据注释相比,Fluent Api有哪些优缺点?换句话说:即使在某些情况下可以使用这两种方法,在一种情况下,一种方法应该优先于另一种方法吗?
我决定是否应该使用富域模型而不是贫穷领域模型,并寻找两者的好例子.
我一直使用Anemic Domain Model构建Web应用程序,由Service - > Repository - > Storage层系统支持,使用FluentValidation进行BL验证,并将我的所有BL放在Service层中.
我读过Eric Evan的DDD书,他(以及Fowler和其他人)似乎认为Anemic Domain Models是一种反模式.
所以我真的很想了解这个问题.
此外,我真的在寻找一个富域模型的好(基本)示例,以及它提供的贫血域模型的好处.
这两个范围有什么区别?
我正在Module每层构建(存储库,服务,MVC应用程序),但为了让InstancePerHttpRequest您需要Autofac.Mvc程序集.
我应该在我的存储库和服务层中使用哪个范围?
如何告诉EF如何命名数据库以及将其放在何处?
如果Web.Config中没有连接字符串,它会尝试将其放在本地SQLEXPRESS服务器中,但我想将它放在已知的SQL Server上,并将其命名为我想要的.有什么建议?
您应该单元测试类的简单属性,断言是否设置并检索了值?或者这真的只是单元测试语言?
例
public string ConnectionString { get; set; }
Run Code Online (Sandbox Code Playgroud)
测试
public void TestConnectionString()
{
var c = new MyClass();
c.ConnectionString = "value";
Assert.Equal(c.ConnectionString, "value");
}
Run Code Online (Sandbox Code Playgroud)
我想我没有看到它的价值.
我首先使用代码设计我的数据库,我想我需要一些帮助.
我收到此错误:
在表'Invoices'上引入FOREIGN KEY约束'SalesOrder_Invoices'可能会导致循环或多个级联路径.指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束.
无法创建约束.查看以前的错误.
我想尝试以下关系/键:
--> = 1 to Many Relationship
Run Code Online (Sandbox Code Playgroud)
我试图通过以下标准来定义它们:
<ClassName><PrimaryKeyID>
Run Code Online (Sandbox Code Playgroud)
示例:Customer具有ID属性,因此在CustomerLocation我定义外键时如下:
Public Property CustomerID AS Integer
Run Code Online (Sandbox Code Playgroud)
我所要做的就是定义外键是否正确?我是否还必须为我定义的每个键设置导航属性?
并且,我可以在对象的同一主键上没有多个外键吗?
更新
所以要定义一个关系,你使用ClassName.PrimaryKeyProperty?或者你使用导航属性?或两者?困惑!!
更新2
因此,为了使关系发挥作用,你必须定义双方......我想.
Public Class Customer
Public Property ID AS Integer
Public Overrideable Property Locations AS ICollection(OF CustomerLocation) …Run Code Online (Sandbox Code Playgroud) 在CQRS中,它们的命令和查询是否属于域?
事件是否也属于域?
如果是这种情况,那么命令/查询处理程序只是在基础架构中实现吗?
现在我有这样的布局:
Application.Common
Application.Domain
- Model
- Aggregate
- Commands
- Queries
Application.Infrastructure
- Command/Query Handlers
- ...
Application.WebApi
- Controllers that utilize Commands and Queries
Run Code Online (Sandbox Code Playgroud)
另一个问题,你从哪里筹集事件?命令处理程序或域聚合?
我是这个整体设计概念的新手,在过去几周的阅读中,我收集了大量的信息,但它似乎分散且矛盾.条款喜忧参半,我只是很难想到这一点.
我使用的模式是这样的,并假设流程如下:
MVC应用程序
控制器处理来自客户端的给定视图的请求/响应.在控制器操作方法内部,它们联系服务(服务层)并请求对象以构建视图模型,并从视图模型中检索对象.
视图模型
我在视图中使用强类型视图模型.
是视图模型DTO吗?它们应该只包含Name,AddressLine1,Address City等简单属性,还是应该包含复杂属性,多个对象等.
是视图模型中的验证.如果是这样,它将是必需的字段,字段长度等验证.然后验证用户名已经存在,或者您需要与服务层中的其他对象进行交互?
视图模型可以只包含从EF返回的POCO类,还是应该使用AutoMapper?
如果使用AutoMapper和DTO,DTO是POCO类的克隆吗?
您会在控制器,视图模型或下面的服务层中进行映射吗?
服务
对我来说,服务是与存储库联系的对象,用于从EF获取POCO对象.这就是我所有业务逻辑的所在.一旦服务将对象传递回存储库以持久保存到EF,它们就被视为有效对象.它是否正确?
存储库
它们中没有业务逻辑,它们仅用于在服务和EF之间传输对象.它是否正确?我在这里使用通用存储库实现接口.那么你可以扩展通用存储库以满足特殊需求吗?
关于术语的问题
1)业务对象是否等于域对象?域对象应包含多少逻辑?
2)域模型是EF模型吗?我正在使用Model-First方法.
3)依赖注入 - 我应该使用它吗?我理解它是如何工作的,只是没有得到真正的好处.我和Ninject一起玩.
我认为社区将受益于某种包含代码示例的所有最佳实践的wiki.那里有类似的东西吗?很多样本都非常简单,很多微软样本即使在声称时也不使用这种模式.
提前感谢所有拥有并将帮助我的人.
顺便说一句 - 我认为StackOverflow需要一点,"接受答案"复选框旁边的"买我一个啤酒"按钮:)
entity-framework poco repository-pattern service-layer asp.net-mvc-3
我想初始化一个int数组并用一系列数字填充它:
return new int[].Populate(30,50);
那么我会有一个30,31,32,33 ...... 50的阵列
c# ×3
arrays ×1
asp.net-mvc ×1
autofac ×1
cqrs ×1
domain-model ×1
oop ×1
poco ×1
unit-testing ×1