Я начал работать с ASP.NET MVC, и теперь у меня есть общее представление об использовании шаблона репозитория с моими классами POCO EF Code First и использовании Ninject для DI.
Я хотел бы получить правильные привычки TDD и изо всех сил пытаться понять, как лучше всего использовать его вместе с тем, где реализовать некоторую логику.
Например, у меня есть следующий упрощенный класс POCO:
public int ProjectID { get; set; }
[Required]
[MaxLength(150)]
public string Title { get; set; }
public string Description { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? DueDate { get; set; }
public DateTime? CompletionDate { get; set; }
public virtual ICollection<ProjectCode> ProjectCodes { get; set; }
public virtual ICollection<ProjectTask> ProjectTasks { get; set; }
Вот мой интерфейс (сгенерированный MVCScaffolding)
public interface IProjectRepository
{
IQueryable<Project> All { get; }
IQueryable<Project> AllIncluding(params Expression<Func<Project, object>>[] includeProperties);
Project Find(int id);
void InsertOrUpdate(Project project);
void Delete(int id);
void Save();
}
Я хотел бы проверить, что DueDate и CompletionDate более поздние, чем StartDate. Я не уверен, смогу ли я сделать это, используя аннотации данных, поскольку это немного сложно, хотя было бы полезно разрешить ненавязчивую проверку javascript на мой взгляд.
Если я могу использовать аннотации данных, я не уверен, как писать тесты для этой логики.
Моя другая идея состояла в том, чтобы создать сервисный уровень между контроллером и интерфейсом для выполнения этой проверки, но тогда я не могу найти простой способ выполнить проверку на стороне клиента / сервера или как лучше реализовать базовую службу для подтвердите даты, как мне требуется.
Я ожидаю, что со временем у меня появятся более сложные варианты, и было бы хорошо, чтобы моя архитектура была "правильной" сейчас.