Как я могу заставить слой своих бизнес-объектов использовать уровень управления в своих методах? - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть решение в VS2010 с несколькими проектами, каждый из которых образует слой в моем приложении.У меня есть бизнес-объекты, которые в настоящее время являются объектами без методов, и у меня есть уровень управления, который ссылается на уровень бизнес-объектов в своем проекте.Теперь я думаю, что плохо спроектировал свое приложение и хотел бы переместить методы из вспомогательных классов (которые находятся на другом уровне) в методы, которые я создам в самих бизнес-объектах.

Например, у меня есть объект VirtualMachine, который использует вспомогательный класс для вызова метода Reboot (), который передает запрос на уровень управления.Класс static manager взаимодействует с API, который перезагружает виртуальную машину.Я хочу переместить метод Reboot () в объект VirtualMachine, но мне нужно будет сослаться на уровень управления:

public void Reboot()
{  
    VMManager.Reboot(this.Name);
}

Поэтому, если я добавлю ссылку на свой проект управления в свой проект сущностей, я получуошибка циклической зависимости, как и должно быть.Как я могу разобраться в этой ситуации?Нужен ли мне еще один уровень между уровнем сущности и уровнем управления?Или я должен просто забыть об этом и оставить все как есть.

Приложение работает нормально, но я обеспокоен тем, что мой дизайн не особенно ориентирован на ООП, и я хотел бы исправить это.

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Вы правы, вы не должны делать циклические ссылки, поскольку создание другого слоя может просто помочь вам избежать ошибки циклической ссылки, но это все равно будет круговая ссылка, если я вас правильно понял.

Я бысядьте, нарисуйте карту и методы должны вызываться ТОЛЬКО в слоях.Это самые общие методы в нижней части программы, и чем более специализированными вы становитесь, тем выше иерархия, которую вы должны поместить.

API создаваемой вами программы должен быть нанижняя часть этой иерархии.

Вам может не потребоваться перепроектировать весь ваш проект.Но, похоже, вы могли бы помочь себе с визуализацией структуры.

0 голосов
/ 03 апреля 2012

Уровень управления (так как это тот, кто выполняет работу), кажется, не помещается на вершине бизнес-уровня. И на самом деле у нас нет такого слоя выше бизнес-уровня, у нас есть только фасадный слой в верхней части бизнес-уровня - что не то, что вам нужно.

Из того, что я вижу в вашем проекте, вам нужен бизнес-уровень для использования сервисов вспомогательного класса:

// Business layer
public class VirtualMachineManager
{
   IRebooter _rebooter;
   public class(IRebooter rebooter)
   {
      _rebooter = rebooter;
   }
}

// helper class
public class Rebooter : IRebooter 
{
   ....
}
...