我正在观看"店面入门套件",它使用带有服务层的存储库模式.在视频中,他没有真正解释他为什么使用服务层.好像那些只是额外的.
什么是使用服务层的利弊?
在三层体系结构中,有表示/ Web层,服务层和数据库层。但是,在我最近从事的项目中,我看到了对我来说是新的Manager层。您能否解释一下服务层/类与管理器层/类之间的区别?
还请提出一些用于学习3层体系结构和相关模式的好书。(对于Java / Java EE应用程序)
SRP负责人说:
一个类或模块应该只有一个改变的理由
我有一些Facade类作为我的服务层类.例如SaleService,它提供了一些方法,例如SaveOrder(),CancelOrder(),CreateOrder(),GetAllOrders(),GetAllPlannedOrders(),...
我只是因为他们的概念关系而把它们放在一起.
使用这种方法的类可能有多个改变()的原因,违反了SRP吗?如果是的话,我该如何处理这个问题呢?
design-patterns single-responsibility-principle facade conceptual service-layer
我最近得到了Scott Miller和Nick Tune的一本关于领域驱动设计的模式,原理和实践.它在C#中有一些很好的例子,所以与我之前读过的其他DDD书籍有点不同.由于C#支持委托和事件,Domain事件实现非常简洁.
但是,有一件事让我担心,正如本书在应用服务一章中所说的那样,它应该是"程序式的,薄的".我知道应用程序层应该很薄,但为什么程序化?我不想写程序代码,或者我不会首先选择DDD.我还发现这个stackoverflow文章还标签Application Services是程序代码:
所以你看?应用程序服务是程序式的,而不是OOP.这让我想知道是否可以通过OO接口替换应用程序服务的过程接口来将设计改进为更多OO.本文建议方法对象可以,并且它有效吗?有哪些OO替代程序应用程序服务?谁能详细说明?
http://ayende.com/blog/2145/entities-services-and-what-goes-between-them
我使用Zend Framework进行开发已有多年,现在正在学习Laravel。
在我以前的应用程序中,我通常有一个由控制器调用的服务层。服务层位于映射器和域模型的顶部,负责某些应用程序逻辑,引发事件,某些输入过滤等。
我为什么不应该在Laravel中实现服务层?在到目前为止的示例中,控制器直接与域对象(或更准确地说,是活动记录)一起工作。
如果我的Laravel控制器调用我的服务层,我会失去Laravel的任何优势吗?(据我所知,我仍然可以使用Route / Model绑定)。
作为第二个问题-实施我的服务层的最佳方法是什么?作为服务提供商的集合,也许吗?
我想对我目前的设计提供一些帮助.我有一个WCF服务,WCF服务背后是一个服务层(http://martinfowler.com/eaaCatalog/serviceLayer.html)和存储库层.
因此,客户端调用WCF服务层,WCF服务层(充当服务层)调用存储库层.
存储库层返回表示数据库的MODELS(Poco).那么服务层我认为我需要将POCOS转换为DTO以通过线路传输?或者我应该把这些作为POCO?
一旦我在服务层上有我的给定对象,我就将其返回给客户端(ASP.NET MVC),其控制器负责将从WCF服务返回的对象映射到VIEWMODEL.
我想知道我这样做是正确的,即WCF服务后面的服务层和存储库层?
并且控制器负责从WCF服务返回的实际模型创建ViewModel.
此外,我想知道是否真的有必要转换从存储库将返回到WTO服务返回的DTO准备好的REAL模型.
任何帮助真的很感激
我正在阅读有关服务层和存储库的信息.现在我想知道服务层是否必须包装dal.我正在使用存储库和MVP模式进行大量工作.演示者现在拥有业务逻辑.但是我想的越多,它就不是将业务逻辑放在演示者和数据访问层中的逻辑场所.所以这就是服务层的用武之地.
但是,演示者现在是否与服务层进行了对话?是否"允许"演示者可以访问存储库?或者一切都应该通过服务层?在后一种情况下,服务层只是一个中间人:
MyFooService:
public List<Foo> GetAllFoo()
{
var listFoo = new FooRepository().GetAll().TiList();
return listFoo;
}
Run Code Online (Sandbox Code Playgroud)
主持人:
public List<Foo> GetAllFoo()
{
var listFoo = new MyFooService().GetAllFoo();
return listFoo;
}
Run Code Online (Sandbox Code Playgroud)
是好的方法吗?或者"允许"演示者直接调用存储库?
我有一些构造函数的问题,controller并且service被调用controller.
这是我的服务:
// model state dictionary for validation
private ModelStateDictionary _modelState;
// initialize UnitOfWork
private IUnitOfWork _unitOfWork;
public TownService(ModelStateDictionary modelState, IUnitOfWork unitOfWork)
{
_modelState = modelState;
_unitOfWork = unitOfWork;
}
Run Code Online (Sandbox Code Playgroud)
现在在我的控制器中我想创建新服务,传递控制器this.ModelState但不想添加UnitOfWork内部控制器.
像这样的东西:
private ITownService _townService;
public TownController()
{
_townService = new TownService(this.ModelState, null);
}
Run Code Online (Sandbox Code Playgroud)
所以考虑的一切UnitOfWork都是在服务内部完成的.控制器只是传递它自己modelState,服务是创建新的服务UnitOfWork.
这可能也是好方法吗?我怎样才能做到这一点?或者我应该new UnitOfWork在控制器中添加而不是null参数?
因为我想尽可能地分离Core,DAL,Web,以便一切都发挥作用,并且在控制器和服务中添加UnitOfWork似乎是不好的方式......
谢谢.
.net asp.net-mvc dependency-injection unit-of-work service-layer
我构建了一个具有干净架构的 asp.net core Web api,我的层是:
在我的 Web API 中,我从外部 Exchange Web 服务加载数据。我想为我的客户提供我自己的 Web API。
为此,我在数据层实现了一个存储库,该存储库从外部 Web 服务获取数据作为 Class 的对象Appointment。
在服务层,我使用 AutoMapper 将对象映射到我自己的类EventDTO。
现在我不知道从 Web API 控制器访问这些数据的最佳实践是什么。
在我看来,当遵循干净的架构原则时,我必须EventDTO将EventEntity. 但是当我这样做时,我有两个 100% 相同的对象,因为没有逻辑,EventEntity并且我做了两次相同的映射。那没有意义?!?
但是当我将直接传递EventDTO给控制器时,它会打破干净架构的原则吗?
namespace Example.API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class EventController : ControllerBase
{
private readonly IEventService eventService;
public EventController (IEventService eventService)
{
this.eventService = eventService ?? throw new ArgumentNullException(nameof(eventService));
}
[HttpGet]
public async Task<IActionResult> …Run Code Online (Sandbox Code Playgroud) dto automapper service-layer clean-architecture asp.net-core-webapi
service-layer ×10
c# ×3
asp.net-mvc ×2
oop ×2
.net ×1
3-tier ×1
automapper ×1
conceptual ×1
controller ×1
dto ×1
facade ×1
java-ee ×1
laravel ×1
repository ×1
single-responsibility-principle ×1
unit-of-work ×1
wcf ×1