J'ai un ensemble de classes métier/domaine (pour un calendrier) qui vont être exposées dans une API publique interne. Dans la même API, il y a des objets de données qui reflètent directement la structure de base de données sous-jacente (NHibernate mapping, mais ce n'est pas important). Ce que je dois faire est de construire des collections typées de ces objets, ainsi les jours sur le calendrier peuvent chacun contenir un ensemble de rendez-vous, de rappels, etc., qui viennent de la base de données.Logique métier dans un objet de données vs couplage par rapport à DTO (vs.?)
Une solution consiste à « marquer » chaque objet de données en utilisant une interface marqueur du modèle de domaine:
public class CalendarAppointment : PersistentEntity, ICalendarObject
Mais j'ai mis des choses de modèle d'affaires/domaine avec mon modèle de données.
Une autre solution consiste à envelopper les classes de modèle de données comme suit, et exposer/utiliser celles de l'API civile:
public class Appointment : CalendarAppointment, ICalendarObject
Mais ce couplage introduit très évident.
Une troisième solution consiste à utiliser un DTO, mais j'aurais besoin d'exposer chaque champ dans l'objet de données dans le DTO ... il ne semble donc pas logique de créer un DTO en premier lieu.
Quelle est la meilleure option ici, ou y at-il une meilleure option?
Ceci est un projet .NET 2.0, si cela fait une différence.
Je devrais clarifier, et je vais éditer ma question. L'API dont je parle sera en interne publique - le plan est qu'il sera utilisé pour développer notre produit de base, et aussi pour étendre la fonctionnalité du produit de base (cela fait partie d'une migration système héritée où plusieurs clients ont d'énormes écarts par rapport au produit de base). Nous avons séparé les classes _structure_ de données (comme ci-dessus) de l'interrogation de la couche de données, mais ces deux éléments doivent être exposés dans l'API. –