Перепроектировать класс репозитория так, чтобы он обрабатывал различные реализации объектов запроса - PullRequest
0 голосов
/ 13 апреля 2020

Мне нужно перепроектировать существующее приложение, в котором есть класс репозитория, обрабатывающий только указанный тип c объекта. Свойства и реализация объекта указываются c только для одного типа. Мне нужно расширить возможности этого класса репозитория так, чтобы он мог обрабатывать запросы для разных типов объектов, имеющих разные реализации, поскольку завтра таких объектов может быть 'n'.

Может кто-нибудь подсказать, что будет лучший способ сделать такой редизайн.

Существующий дизайн, как показано ниже:

class SomeClass
{
  string colour {get; set;}
  string type {get; set;}
}


class Service : IService

public void DoWork()
{
    Repository repo = new Repository();
    repo.DoRepoWork();
}

public void DoSomeOtherWork()
{
   Repository repo = new Repository();
   repo.DoSomeOtherRepoWork();
}

class Repository : IRepository
{
  public void DoRepoWork()
  {
     SomeClass obj = new SomeClass();

     obj.Color = "Blue";
     obj.Type = "Line";

     //Implementation specific to only one type of SomeClass Object

  }

  public void DoSomeOtherRepoWork()
  {
     SomeClass obj = new SomeClass();

     obj.Color = "Blue";
     obj.Type = "Line";

     //Implementation specific to only one type of SomeClass Object

  }
}

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Используйте фабричный шаблон для возврата объектов IRepository. При этом каждый класс на фабрике выполняет различные виды операций репо. то есть один класс выполняет DoRepoWork (), другой - DoSomeOtherRepoWork ()

Позволяет классу Service извлекать данные из фабрики на основе «Типа SomeClass». Так что в будущем, если родные братья SomeClass созданы (то есть SomeOtherClass), тогда вам нужно только добавить новый класс фабрики, который делает SomeOtherClassRepowork

0 голосов
/ 14 апреля 2020

Я думаю, что вопрос не ясен.

  1. Ожидаете ли вы много типов услуг IService? т.е. разные типы классов iService.
  2. Ожидаете ли вы, что каждый тип услуг IService будет выполнять разные виды операций репо? т.е. repoWork (), DoSomeOtherRepoWork ()
  3. Что такое SomeClass. У каждого метода работы репо есть свой собственный объект SomeClass? какое отношение?
...