@nordwind2013

Как избежать повторения кода репозиториев?

Есть куча разных сущностей. Вот диаграмма 5b4f0b2446fd0088054942.jpeg

И нужно создать репозитории для этих чертят. Вот интерфейс родимый
interface IBaseService<T>:IDisposable
    {
        AccountModel Get<T>(int id) where T : class, new();

        AccountModel GetAll<T>() where T : class, new();

        bool Save<T>(AccountModel entity);

        bool Delete(int id);
    }


А вот пример репозитория сущности AccountModel
class AccountBaseService : IBaseService <AccountModel>
    {
        List<AccountModel> AllAccountList = new List<AccountModel>();

        private AccountModel a;

        VideoHosting.AccountModel IBaseService<VideoHosting.AccountModel>.Get<AccountModel>(int id)
        {
            foreach (var a in AllAccountList)
            {
                if (a.AccId == id)
                {
                    return a;
                }

                return a;
            }

            return a;
        }

        AccountModel IBaseService<AccountModel>.GetAll<T>()
        {
            foreach (var a in AllAccountList)
            {
                return a;
            }

            return a;
        }

        bool IBaseService<AccountModel>.Save<T>(AccountModel entity)
        {
            entity = new AccountModel();

            AllAccountList.Add(entity);

            return true;
        }

        bool IBaseService<AccountModel>.Delete(int id)
        {
            foreach (var a in AllAccountList)
            {
                if (a.AccId == id)
                {
                    AllAccountList.Remove(a);
                }
            }

            return true;
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }
    }

Как можно это сделать без повторения кода? Вся проблема в обобщенном листе, не знаю как его определить. Спасибо.
  • Вопрос задан
  • 155 просмотров
Решения вопроса 1
@SimasikS
Я есть
interface IBaseService<T>:IDisposable where T: BaseEntity
    {
        AccountModel Get<T>(int id) where T : class, new();

        AccountModel GetAll<T>() where T : class, new();

        bool Save<T>(AccountModel entity);

        bool Delete(int id);
    }

class BaseEntity {
 public int Id {get;set;}
}

public BaseService: IBaseService<T> {

 protected List<T> Source = new List<T>();
 public bool Delete(int id) {
  foreach (var a in Source )
            {
                if (a.Id == id)
                {
                    Source.Remove(a);
                }
            }

            return true;
 }
}


Суть приблизительно такая
Eсли у вас поле не "Id" в базе, то нужно "мапить"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы