Ich habe begonnen mit ASP.NET MVC und jetzt ein grundlegendes Verständnis der Verwendung eines Repository-Muster mit meinem EF-Code ersten POCO-Klassen und Ninject für DI.MVC mit Code First mit Validierungslogik und TDD
Ich würde gerne in richtige TDD Gewohnheiten und kämpfen, um vollständig zu verstehen, wie es am besten zu verwenden, zusammen mit, wo einige Logik zu implementieren.
Zum Beispiel habe ich die folgende vereinfachte Klasse 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; }
Hier ist mein Interface (durch die MVCScaffolding erzeugt)
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();
}
ich, dass die DueDate und CompletionDate validieren möchten sind später als das StartDate. Ich bin mir nicht sicher, ob ich dies mit Datenannotationen machen kann, da es ein bisschen komplex ist, obwohl es nützlich wäre, die unauffällige JavaScript-Validierung in meiner Sicht zu ermöglichen.
Wenn ich Datenanmerkungen verwenden kann, bin ich nicht sicher, wie man Tests für diese Logik schreibt.
Meine andere Idee war, eine Service-Schicht zwischen dem Controller und der Schnittstelle zu erstellen, um diese Validierung durchzuführen, aber dann kann ich keine einfache Möglichkeit zur Client/Server-Validierung oder wie Sie einen Basisdienst implementieren um die Daten wie gewünscht zu validieren.
Ich erwarte im Laufe der Zeit komplexere Varianten und es wäre gut, meine Architektur jetzt "richtig" zu machen.