Я пытаюсь отработать первый подход к модели и собираю модель предметной области. Мое требование довольно простое: UserSession может иметь несколько ShoppingCartItems.
Я должен начать с того, что я собираюсь применить интерфейсы модели предметной области к сгенерированным сущностям Linq2Sql (используя частичные классы). Мое требование переводится в три таблицы базы данных (UserSession, Product, ShoppingCartItem, где ProductId и UserSessionId - внешние ключи в таблице ShoppingCartItem). Linq2Sql генерирует эти объекты для меня. Я знаю, что на данном этапе я даже не должен иметь дело с базой данных, но думаю, что важно упомянуть.
Совокупным корнем является UserSession, так как ShoppingCartItem не может существовать без UserSession, но в остальном я неясен. Как насчет продукта? Это определенно сущность, но должна ли она быть связана с ShoppingCartItem?
Вот несколько предложений (все они могут быть неправильными реализациями):
public interface IUserSession {
public Guid Id { get; set; }
public IList<IShoppingCartItem> ShoppingCartItems{ get; set; }
}
public interface IShoppingCartItem {
public Guid UserSessionId { get; set; }
public int ProductId { get; set; }
}
Еще один будет:
public interface IUserSession {
public Guid Id { get; set; }
public IList<IShoppingCartItem> ShoppingCartItems{ get; set; }
}
public interface IShoppingCartItem {
public Guid UserSessionId { get; set; }
public IProduct Product { get; set; }
}
Третий:
public interface IUserSession {
public Guid Id { get; set; }
public IList<IShoppingCartItemColletion> ShoppingCartItems{ get; set; }
}
public interface IShoppingCartItemColletion {
public IUserSession UserSession { get; set; }
public IProduct Product { get; set; }
}
public interface IProduct {
public int ProductId { get; set; }
}
У меня такое ощущение, что мой разум слишком тесно связан с моделями баз данных и таблицами, что затрудняет понимание этого. Кто-нибудь хочет отделить?