Я пытаюсь использовать разработку на основе домена (DDD) для своего нового проекта ASP.NET MVC2 с Entity Framework 4. После некоторых исследований я пришел к следующим соглашениям о слоях для каждого уровня в отдельном проекте класса:
public class User
{
//Contains all the properties for the user entity
}
public interface IRepository where T : class
{
IQueryable GetQuery();
IQueryable GetAll();
IQueryable Find(Func condition);
T Single(Func condition);
T First(Func condition);
T GetByID(int id);
void Delete(T entity);
void Add(T entity);
void Attach(T entity);
void SaveChanges();
}
public interface IUserRepository: IRepository {}
public class UserService
{
private IUserRepository _userRepository;
public UserService(IUserRepository userRepository)
{
_userRepository = userRepository;
}
// This class will hold all the methods related to the User entity
}
public class UserRepository : IRepository
{
// Repository interface implementations
}
MyCompany.Web --> Это проект MVC2
В настоящее время уровень моих репозиториев содержит ссылку на уровень домена. Насколько я понимаю, внедрение UserRepository в класс UserService очень хорошо работает при модульном тестировании, поскольку мы можем передавать поддельные пользовательские репозитории. Итак, с этой архитектурой похоже, что мой веб-проект должен иметь ссылки как на слои домена, так и на слои репозиториев. Но действительно ли это? Потому что исторически уровень представления имел ссылку только на уровень бизнес-логики.
Я пытаюсь использовать разработку на основе домена (DDD) для своего нового проекта ASP.NET MVC2 с Entity Framework 4. После некоторых исследований я пришел к следующим соглашениям о слоях для каждого уровня в отдельном проекте класса:
[b]MyCompany.Domain[/b]
[code] public class User { //Contains all the properties for the user entity }
public interface IRepository where T : class { IQueryable GetQuery(); IQueryable GetAll(); IQueryable Find(Func condition); T Single(Func condition); T First(Func condition); T GetByID(int id); void Delete(T entity); void Add(T entity); void Attach(T entity); void SaveChanges(); }
public interface IUserRepository: IRepository {}
public class UserService { private IUserRepository _userRepository; public UserService(IUserRepository userRepository) { _userRepository = userRepository; } // This class will hold all the methods related to the User entity } [/code]
В настоящее время уровень моих репозиториев содержит ссылку на уровень домена. Насколько я понимаю, внедрение UserRepository в класс UserService очень хорошо работает при модульном тестировании, поскольку мы можем передавать поддельные пользовательские репозитории. Итак, с этой архитектурой похоже, что мой веб-проект должен иметь ссылки как на слои домена, так и на слои репозиториев. Но действительно ли это? Потому что исторически уровень представления имел ссылку только на уровень бизнес-логики.