Sto sviluppando alcuni progetti web di test per conto mio per imparare DDD e buona pratica architettonica. Quindi l'applicazione, in pratica, è un semplice gestore di foto.
Sto sviluppando un'architettura a 3 livelli e per ora ho:
- DAL:
- Primo database EF
- UserRepository
- PhotoRespoitory
- UnitOfWork
-
BLL
- UserService: registrazione utente, autenticazione, registrazione
- PhotoService: recupero, caricamento e aggiornamento di foto
- Modelli DTO: utente, foto, album
- Automapper: mappatura DAO dal modello EF al modello DTO
-
Client MVC Asp.Net
Ecco alcuni esempi di modelli DTO:
public abstract class ModelBase
{
public virtual long Id { get; protected set; }
}
public class User : ModelBase
{
public string Name { get; set; }
public string Email { get; set; }
public UserRole UserRole { get; set; }
public DateTime RegistrationDate { get; set; }
public override string ToString()
{
return $"{Name} {Email} {UserRole} {RegistrationDate}";
}
}
public class Photo : ModelBase
{
public string Name { get; set; }
public DateTime DateTaken { get; set; }
public string Place { get; set; }
public string CameraModel { get; set; }
public string FocalLength { get; set; }
public string Diaphragm { get; set; }
public string ShutterSpeed { get; set; }
public string ISO { get; set; }
public bool? FlashMode { get; set; }
public long OwnerId { get; set; }
public string OwnerName { get; set; }
public long AlbumId { get; set; }
public string AlbumName { get; set; }
}
Quindi le mie domande sono:
-
Ha senso creare modelli di dominio con qualche logica, dato che la logica di manipolazione del modello è stata delegata al servizio?
-
BLL è il posto giusto per i modelli DTO?
-
Devo creare un
ApplicationService
aggiuntivo che conterràPhotoService
ePhotoService
e trova l'utente che carica l'immagine e quindi passa ilUserDto
conPhotoDto
aPhotoService
?