有一點你必須把服務層和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