Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Вопрос по ООП


Автор: Unforgiven 27.2.2013, 20:23
Добрый вечер,

На данный момент не силен в ООП, и возникает вопрос в логике создания базовых классов в .NET конкретной программы.

Есть классы окон, отображающие информацию в DataGrid. Структура похожа, классы плодятся. Логично что надо выделить в базовый класс.
Они взаимодействуют с классами модификации БД. Там все просто. 3 метода:
Insert(DbRecord record)
Update(DbRecord record)
Delete(DbRecord record)

DbRecord в данном случае - класс для хранятся названия столбцов и значений.
Логично, что окна, наследуемые от базового класса и классы модификации БД, будут принимать на вход DbRecord 
(а точнее классы - наследники DbRecord).

Как сделать логично DbRecord?
В этом и суть вопроса. Пока есть только мысль в двух форматах:

Код

class DbRecord
{
    public DbRecord() {}    
    
    public    string    GetValue(string key) {}
    public    void    SetValue(string key, string value) {}
    
    private Dictionary<string, string> dic;
    
    private void    SetKeys() {}
}


или же что-то наподобие этого

Код

class DbRecord
{
    public DbRecord() {}    
    
    public    string    GetValue(string key) {}
    public    void    SetValue(string key, string value) {}
    
    public    string    Names    { get; set; }
    public    string    Values    { get; set; }
    
    private List<string> names;
    private List<string> values
    
    private void    SetKeys() {}
}


Что не нравится? Чтобы организовывать взаимодействие между классами, 
особенно если название колонки поменялось или что-то еще, тяжело становится уследить за ошибками

Хотелось бы услышать ваше мнение.

Спасибо.

Автор: AntonX 3.3.2013, 13:37
посмотри в сторону паттернов проектирования
вот хорошая ссылка http://citforum.ru/SE/project/pattern/ для старта.
Тебе нужен паттерн ActiveRecord/Repository + DataManager + MVC/MVVM/e.t.c

По вопросу делегирования полномочий посмотри в сторону использования композиции вместо наследования. Композиция в твоем случае даст лучший результат при менее запутанной архитектуре.

Перед началом еще почитай про "уровневую(слоистую) архитектуру" ПО

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)