Jest kilka zagadnień które nie dają mi spokoju ponieważ co czyjaś publikacja widzę inne podejście.
Chciałbym przedstawić przykładowy kod a potem zadać kilka pytań.
Jest to Model domenowy. ORM to EF. Wszystkie Adnotacje atrybutów odnośnie formularza przechowywane są ViewModel
public class Person
{
// primitive properties
public int Id { get; set; }
[MaxLength(150)]
public string Name { get; set; }
}
Interface
public interface IPersonManager
{
/// <summary>
/// Edits existing person
/// </summary>
Task EditPerson(Person person);
}
Klasa PersonManager Jest to repo Które dziedziczy interface IPersonManager.
public async Task EditPersonAsync(Person person)
{
_dbContext.Entry(person).State = EntityState.Modified;
await _dbContext.SaveChangesAsync();
}
Klasa PersonComponent Odpowiada za logikę oraz Mapowanie modelu domenowego na ViewModel. Wiem że są dostępne biblioteki Automaperów ale znacznie spowalniają one program.
private readonly IPersonManager _personManager;
public PersonComponent(IPersonManager personManager)
{
_personManager = personManager;
}
private Person MapPersonViewModelToModel(PersonViewModel personViewModel)
{
Person person = new Person();
person.Id = personViewModel.Id;
person.Name= personViewModel.Name;
person.Phone = personViewModel.Phone;
return person;
}
public async Task EditPersonAsync(PersonViewModel personViewModel)
{
Person person = MapPersonViewModelToModel(personViewModel);
await _personManager.EditPersonAsync(person);
}
Kontroler
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "Id,Name")] PersonViewModel personViewModel)
{
if (ModelState.IsValid)
{
await _personComponent.EditPersonAsync(personViewModel);
return RedirectToAction("Index");
}
return View(personViewModel);
}
Co myślicie o podejściu "Anemic Domain Model" I w jaki sposób określić wtedy właściwości atrybutów encji.
Czy moje podejście do programowania asynchronicznego jest ok? Czy np. Kontroler powinien być jedynie wrapem synchronicznym który wykonuje metodę asynchroniczną. Szczerze to nie do końca potrafię sobie wyobrazić co się dokładnie dzieje w kodzie i wątkami w czasie pracy programu.
Czy moje podejście rozłożenia kodu na warstwy jest ok ?
Czy Repo z EF to dobry pomysł jeśli jest to swoistego rodzaju abstrakcja na abstrakcji ?
Jaki Automaper możecie polecić?