La classe EntityBase o DomainBase viola l'LSP?

1

Supponiamo di avere una classe astratta EntityBase che è la classe base per tutte le nostre entità, ad es.

public abstract class EntityBase {
  public Guid Id {get;set;}
}
public class Customer : EntityBase {
  public string Name {get;set;}
}
public class Orders : EntityBase {
  public string OrderNumber {get;set;}
}

Dove l'intento è quindi essere in grado di creare un metodo di estensione su EntityBase in modo che possa essere proiettato nelle classi di dominio, ad es.

public static class ProjectionExtensions {
  public static TProjection ProjectAs<TProjection>(this EntityBase item) where TProjection : class, new() {
    return Mapper.Map<object, TProjection>(item);
  }
}

Questo viola LSP? È meglio implementare un'interfaccia IEntity piuttosto che una classe base astratta EntityBase ?

per es.

public interface IEntity {
  public Guid Id {get;set;}
}
public class Customer : IEntity {
  public Guid Id {get;set;}
  public string Name {get;set;}
}
public class Orders : IEntity {
  public Guid Id {get;set;}
  public string OrderNumber {get;set;}
}

public static class ProjectionExtensions {
  public static TProjection ProjectAs<TProjection>(this IEntity item) where TProjection : class, new() {
    return Mapper.Map<object, TProjection>(item);
  }
}
    
posta user2321864 31.01.2016 - 08:21
fonte

1 risposta

2

Il principio di sostituzione di Liskov è una delle linee guida di progettazione OOP più semplici. Semplicemente afferma che qualsiasi tipo di bambino deve essere sostituibile per il suo genitore senza interrompere il programma.

Ad esempio, se hai una firma del metodo come

assignPersonToDepartment(Person p)

e hai un sacco di sottotipi di Person , come Employee , o Manager , o BoardMember , o President o qualsiasi altro sottotipo, che puoi passare uno di questi sottotipi in il metodo assignPersonToDepartment e il programma funziona correttamente.

Questo è tutto: ai sottotipi non è consentito rompere i contratti dei loro genitori.

    
risposta data 31.01.2016 - 09:14
fonte

Leggi altre domande sui tag