Как отделить контроллер от модели, когда она уже смешана? - PullRequest
0 голосов
/ 24 октября 2011

Я не уверен, является ли это именно шаблоном MVC, но я пытаюсь отделить весь слой данных (который в нескольких словах - это все, что будет сериализовано в файл XML) от его действия. Внедрение MVC просто ради этого не является моей целью здесь. Так что, если это не совсем MVC, я в порядке.

Скажем, например, у меня есть эти классы (это просто примеры классов, которые пытаются проиллюстрировать мою проблему, а не мои настоящие классы):

public class MixedSubClass
{
    public string SomeData {get;set;}

    public void DoSomeActionWhichRequiresControls(Control someControl)
    {
        // do stuff            
    }
}

public class MixedClass
{
    private Control _SomeControl;

    public List<MixedSubClass> _SubClasses = new List<MixedSubClass>();
    public List<MixedSubClass> SubClasses { get { return _SubClasses; } }

    public MixedClass(Control someControl)
    {
        _SomeControl = someControl;
    }

    public void DoSomeMoreActionsWhichRequiresControls()
    {
        foreach (var subClass in SubClasses)
        {
            subClass.DoSomeActionWhichRequiresControls(_SomeControl);
        }
        // Do more stuff
    }
}

Поэтому, когда я сериализую MixedClass, сериализуются только открытые поля, что я и хочу. Но теперь я хочу иметь единственный слой данных, который даже не требует сборки Windows.Forms. Я хочу остаться с этим:

public class MixedSubClass
{
    public string SomeData {get;set;}
}

public class MixedClass
{
    public List<MixedSubClass> _SubClasses = new List<MixedSubClass>();
    public List<MixedSubClass> SubClasses { get { return _SubClasses; } }
}

И поместите все это в независимую сборку. Но моя проблема сейчас в том, как вернуть это к предыдущему. Первым делом я подумал о том, чтобы использовать методы расширения, но, как вы можете видеть из моего примера кода, иногда мне нужно хранить какое-то значение, которое не сериализуемо, например Control _SomeControl. Кроме того, в реальной жизни эти списки представляют собой списки списков, деревьев и более сложных вещей, подобных этому, поэтому мне нужно некоторое хорошее основание, прежде чем я начну (на самом деле у меня уже есть проект со всем моим слоем данных, который прекрасно компилируется без Windows.Forms, но теперь у меня проблемы с его сборкой).

Как бы вы справились с этим? Должен ли я просто не разделять слой данных таким образом?

1 Ответ

0 голосов
/ 25 октября 2011

Я думаю, у вас все хорошо. Ваш уровень данных должен быть свободен от ссылок на элементы управления пользовательского интерфейса (будь то winform, web и т. Д.).

Хотя трудно дать точный пример кода на основе того, что вы опубликовали, вам необходимо добавить набор классов, похожих на контроллеры, которые отображают ваши данные (или модель) в ваш пользовательский интерфейс (также известный как представление). Они должны содержать ссылку как на данные, так и на объекты пользовательского интерфейса и выполнять те работы, которые вы удалили (DoSomeActionWhichRequiresControls).

...