有一点你必须把服务层和DAL结合在一起。但是你可以把它分成不同的程序集。在ServiceLayer Foo.Services.Core.dll
namespace Foo.Services.Core.Models
{
public class Foo
{
...
}
}
namespace Foo.Services.Core.DataServices
{
public interface IFooService
{
Task<Foo> GetByIdAsync(int id);
}
}
下一个项目的
定义将更加具体了的UnitOfWork Foo.Services.Impl.UnitOfWork.dll
namespace Foo.Services.Impl.UnitOfWork
{
public class UnitOfWorkFooService : IFooService
{
private readonly IUnitOfWork _uow;
public UnitOfWorkFooService(IUnitOfWork uow)
{
_uow = uow;
}
public Task<Foo> GetByIdAsync(int id);
{
return await _uow.FooRepo.FindOne(...).FirstOrDefaultAsync();
}
}
}
或者,也许在未来的一共有不同跟一个REST API Foo.Services.Impl.RestApi.dll
namespace Foo.Services.Impl.RestAPI
{
public class RestApiFooService : IFooService
{
private readonly IRestApi _restapi;
public RestApiFooService(IRestApi restapi)
{
_restapi = restapi;
}
public Task<Foo> GetByIdAsync(int id);
{
return await _restapi.FooEndpoint.GetAsync(id);
}
}
}
你可以提取你的实体到另一个项目。 – Simon
你的服务层使用你的数据层,这很好。所以你的服务层会知道这个实体是这个参考的一部分。这很常见,除非你像上面提到的那样将你的实体移动到另一个项目中。 – Ric
服务层需要了解实体,但不涉及数据层的其余部分。 – Simon