Итак, я разрабатываю какое-то программное обеспечение и стараюсь постоянно использовать TDD и другие передовые методы.
Я пытаюсь написать тесты для определения классов и репозитория.
Допустим, у меня есть классы Customer
, Order
, OrderLine
.
Теперь могу ли я создать класс Order
как что-то вроде
abstract class Entity {
int ID { get; set; }
}
class Order : Entity {
Customer Customer { get; set; }
List<OrderLine> OrderLines { get; set; }
}
Что будет хорошо сериализовано, но, если меня не волнуют OrderLines
или Customer
детали, не такие легкие, как хотелось бы. Или я просто сохраняю идентификаторы элементов и добавляю функцию для их получения?
class Order : Entity {
int CustomerID { get; set; }
List<OrderLine> GetOrderLines() {};
}
class OrderLine : Entity {
int OrderID { get; set; }
}
И как бы вы структурировали репозиторий для чего-то подобного?
Могу ли я использовать абстрактный репозиторий CRUD с методами GetByID(int)
, Save(entity)
, Delete(entity)
, которые наследуются каждым репозиторием элементов, а также добавлять свои собственные конкретные методы, что-то вроде этого?
public abstract class RepositoryBase<T, TID> : IRepository<T, TID> where T : AEntity<TID>
{
private static List<T> Entities { get; set; }
public RepositoryBase()
{
Entities = new List<T>();
}
public T GetByID(TID id)
{
return Entities.Where(x => x.Id.Equals(id)).SingleOrDefault();
}
public T Save(T entity)
{
Entities.RemoveAll(x => x.Id.Equals(entity.Id));
Entities.Add(entity);
return entity;
}
public T Delete(T entity)
{
Entities.RemoveAll(x => x.Id.Equals(entity.Id));
return entity;
}
}
Какая здесь «лучшая практика»?