Я начал работу с ASP.NET MVC и теперь имею базовое понимание использования шаблона репозитория с моими классами EF Code First POCO и использованием Ninject for DI.MVC с использованием кода сначала с логикой проверки и TDD
Я хотел бы получить правильные привычки 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. Я не уверен, могу ли я сделать это с помощью dataannotations, поскольку он немного сложный, хотя было бы полезно разрешить ненавязчивую проверку JavaScript на мой взгляд.
Если я могу использовать аннотации данных, я не уверен, как идти о написании тестов для этой логики.
Моя другая идея состояла в том, чтобы создать сервисный уровень между контроллером и интерфейсом для выполнения этой проверки, но тогда я не могу найти простой способ сделать проверку на стороне клиента/сервера или как лучше всего реализовать базовую услугу чтобы подтвердить даты, которые мне требуются.
Я ожидаю, что с течением времени у вас будут более сложные варианты, и было бы хорошо, если бы теперь моя архитектура была «права».