powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Где описывать структуру данных?
17 сообщений из 17, страница 1 из 1
Где описывать структуру данных?
    #36345045
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть класс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class Data
{
    RegistryFileType fileType;
    private DefaultTableModel dtm;
    private Vector columnNames;
    private Vector hiddenColumnNames;
    private Vector hiddenColumns;
    public Data(RegistryFileType fileType, Vector columnNames, Vector hiddenColumnNames){}
    public String getXML(){}
    public JTable getTable(){}
    public void setCell(Object value, int row, String columnName){}
    public Object getCell(int row, String columnName){}
}
Заполняется он в классе
Код: plaintext
1.
2.
3.
4.
public class Parser
{
    public Parser(){}
    Data parse(String string){}
}
Причём заполняется он методом public Data(RegistryFileType fileType, Vector columnNames, Vector hiddenColumnNames){}
Где второй и третий параметры передают списки столбцов, в одном то, что будет отображаться в таблице, получаемой методом public JTable getTable(){}, а в другом то, что можно получить только методом public Object getCell(int row, String columnName){}, для служебных нужд, и хранится в векторе векторов. Ну плюс это всё потом будет выдаваться в форме XML, для сохранения в файл. Так вот я думаю, где мне создавать структуру таблицы, названия столбцов то есть? В парсере? Или убрать это из конструктора нафиг, ведь RegistryFileType уже достаточно, чтобы понять, какие столбцы понадобятся, и локализовать это в Data? Или сделать Data абстрактным, и создавать его при помощи фабрики, зависимо от того, какой там будет RegistryFileType? Или вообще куда засунуть это?
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347454
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче понял, никто тут не занимается практическим программированием Сделаю как захочеццо, еси чо, потом отрефакторю.
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347573
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,
злой ты ;-))
Фаулер, к примеру, рекомендует "заменять признак типа наследованием" ( как-то так, точную формулировку лень вспоминать )) ). Иными словами, это значит, что стоить "сделать Data абстрактным, и создавать его при помощи фабрики, и локализовать это в Data". Тогда и от RegistryFileType вообще можно избавиться.
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347582
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychXDiaBLo,
злой ты ;-))
Фаулер, к примеру, рекомендует "заменять признак типа наследованием" ( как-то так, точную формулировку лень вспоминать )) ). Иными словами, это значит, что стоить "сделать Data абстрактным, и создавать его при помощи фабрики, и локализовать это в Data". Тогда и от RegistryFileType вообще можно избавиться.
Хмм, а это идея. Нечто подобное мне приходило сегодня утром на ум, но почему-то не выкристаллизовалось в конкретную идею. Спасибо, я так и сделаю. Правда есть подозрения что могут возникнуть некоторые специфические проблемы, но там уж разберусь в процессе, может я ошибаюсь просто. Кстати, есть шаблоны "абстрактная фабрика", "фабричный метод", "строитель"... Что вы имеете в виду под фабрикой конкретно сейчас? А то я позавчера взялся за книжку по шаблонам, но пока ещё не разобрался с этими шаблонами полностью.
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347613
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoКороче понял, никто тут не занимается практическим программированием Сделаю как захочеццо, еси чо, потом отрефакторю.

Рассказать еще раз про то как доказывали, что органы слуха у тараканов на лапках ???
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347619
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gluk (Kazan)XDiaBLoКороче понял, никто тут не занимается практическим программированием Сделаю как захочеццо, еси чо, потом отрефакторю.

Рассказать еще раз про то как доказывали, что органы слуха у тараканов на лапках ???
Нет, спасибо. Мне Егорыч уже помог направить мысль в нужном направлении.
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347630
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,

Мне кажется тут нужен шаблон стратегия.
В яве я не буль-буль, но попробую написать пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
 class  Data {
     private  Vector columnNames;
     private  Vector hiddenColumnNames;
     private  Vector hiddenColumns;
};

// класс, который будет заниматься заполнением данными в класс Data
 abstract   class  DataTransfer {
   abstract   void  LoadData(Data dat);
};

 class  MyDataTransfer1   extends  DataTransfer {
  void  LoadData(Data dat)
 {
 }
};

 class  MyDataTransfer2   extends  DataTransfer {
  void  LoadData(Data dat)
 {
 }
};


Пример использования:
Код: plaintext
1.
2.
3.
  Data d =  new  Data();
  MyDataTransfer f =  new  MyDataTransfer1();
  f.LoadData(d);
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347641
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SV,
А парсер на что? Там такой метод я указывал:
Data parse(String string){}
Правда string надо переименовать в filename, а то непонятно становится.
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347648
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SV,
Но впрочем насчёт стратегии я подумаю. Хотя по-моему это не совсем подходит. Всё равно спасибо.
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347676
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoMAYAKOV_SV,
А парсер на что? Там такой метод я указывал:
Data parse(String string){}
Правда string надо переименовать в filename, а то непонятно становится.

Может быть я немного не то написал, давно ООП не занимался.
Есть вариант Parser сделать абстрактным с виртуальной функцией parse.
А в классе Data сделать функции для того чтобы парсер мог туда запихивать данные.
Т.е. Data занимается хранением данных и предоставляет возможность ими манипулировать.
А Parser запихивает туда данные в зависимости от стратегии.

Мой пример можно скорректировать, переименовав наименования так:
DataTransfer -> Parser
LoadData -> parse
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347691
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SV,
Дак ведь тип данных то я в парсере и определяю. Форматов файлов штук пять как минимум. Думаю нужен третий класс, в который стратегию вынести, хмм, подумаю ещё.
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347725
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLoMAYAKOV_SV,
Дак ведь тип данных то я в парсере и определяю. Форматов файлов штук пять как минимум. Думаю нужен третий класс, в который стратегию вынести, хмм, подумаю ещё.

Ну еще разок напишу и больше не буду

Можно в качестве третьего класса добавить "строитель",
который в зависимости от типа файла будет возвращать
стратегию для заполнения данных.
Пишу в продолжение к своему примеру:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
   class  Parser {
    public  Data parse(String filename)
   {
     StrategyBuilder b =  new  StrategyBuilder();
     MyDataTransfer dt = b.Build(filename);
     Data d =  new  Data();
     dt.LoadData(d);
      return  d;
   }
  }
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36347737
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MAYAKOV_SVXDiaBLoMAYAKOV_SV,
Дак ведь тип данных то я в парсере и определяю. Форматов файлов штук пять как минимум. Думаю нужен третий класс, в который стратегию вынести, хмм, подумаю ещё.

Ну еще разок напишу и больше не буду

Можно в качестве третьего класса добавить "строитель",
который в зависимости от типа файла будет возвращать
стратегию для заполнения данных.
Пишу в продолжение к своему примеру:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
   class  Parser {
    public  Data parse(String filename)
   {
     StrategyBuilder b =  new  StrategyBuilder();
     MyDataTransfer dt = b.Build(filename);
     Data d =  new  Data();
     dt.LoadData(d);
      return  d;
   }
  }

Шикарно :) Обмозгую, как разгребу всякую фигню. Это просто не основная задача, делаю по мере появления свободного времени.
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36352182
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитал "библию", то есть GoF, и заподозрил что тут ещё Абстрактная фабрика может помочь. Почитаю дальше, может я и неправ.
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36352266
Фотография XDiaBLo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, кажется стратегия не очень отображает то, что обработка этих данных тоже будет несколько отличаться, в зависимости от того, какой тип файла загружен. Я посмотрел, в старой версии программы, 7 типов входного файла. Из них пять обрабатываются одним образом, два немного другим. Причём раньше это было две немного разных программы, первые 5 форматов обрабатывались в одной, вторые 2 формата в другой. То есть получается либо две конкретных фабрики, либо всё таки семь, что впрочем несколько ужасает. Лучше бы их было две Кстати форматы добавляются регулярно. Хотя начальство обещало разобраться с филиалами, и оставить 2 формата. Не думаю что это произойдёт. Поэтому очень важна именно эта часть, возможность добавлять форматы. По-моему Абстрактная фабрика помочь должна, но возможно где-то тут и стратегия нужна, например раз фабрики я вижу 2, значит 7 форматов файлов, между стратегиями можно раскидать. Мне важно не шаблонов напихать побольше, а сделать гибкую систему, т.к. данный продукт часто расширяется и дополняется, и в нём уже целая помойка. Я думаю что проще переписать, предусмотрев будущие изменения и дополнения, чем и дальше по каждой мелочи, шерстить всю программу, и искать взаимозависимости. Тогда и на поддержку и внесение изменений уходить будет меньше времени, и коллегу не стыдно будет привлечь, а то пока я один поддерживаю, а другому программисту, который тут недавно, эту программу даже показать страшно, запутается вконец, и только багов добавит.
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36381295
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,
1. Если кружить по моему примеру, то можно еще сказать:
Добавление нового типа файла состоит следующих действий
(1) добавление нового производного класса для новой стратегии (если нужна новая)
(2) корректировка функции Build
(3) если старая стратегия формирует новый тип файла и возможно нужно еще код ее поправить.

В принципе если видно две стратегии из 7, то нужно и делать две, вот пример Build:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  class  StrategyBuilder
 {
     DataTransfer Buld(filename)
     {
         ...
         // если новый тип файла, а стратегия уже написана, добавляем в условия
         // для различения типов фалов, передаем строку ext в конструктор если надо.
          if  (ext == "txt" || ext = "dat" || ext == "bat")  return   new  MyDataTransfer1(ext);
          if  (ext == "doc")  return  MyDataTransfer2();
          return   null ; // неизвестный тип файла
     }
 }
2. Меня не очень улыбнули еще такие вещи:
a) сам класс Data - вроде по названию он сущностный, а там сидит функция Data для загрузки данный, да еще по ветвящему алгоритму, т.е. два в одном...
Я считаю что классы должны выполнять свои обязанности: кто данные хранит, кто алгоритмы выполняет. Объединять стоит, если классы маленькие получаются и нет смысла в разбиении.
б) И сама фунция Data:
Это:
Код: plaintext
1.
2.
3.
     private  Vector columnNames;
     private  Vector hiddenColumnNames;
     private  Vector hiddenColumns;
    
+ это:
Код: plaintext
1.
     public Data(RegistryFileType fileType, Vector columnNames, Vector hiddenColumnNames){}
    
Весьма странная комбинация, как-то не по ООП-ному. Попытка через функцию передать массивы.
Тут тоже нужно пошерстить. Похоже код написан вообще по процедурному мышлению.

То что я привел может и не подойти или подойти частично, а вообще можно много разных вариантов предложить, все упирается в конкретную задачу, которую автор сообщения описал в начале размыто и туманно, поэтому и ответов мало...
И еще добавлю: сам не владею сильно-то шаблонами, т.к. ООП нет практики сейчас, но скажу что прочитав недавно книгу не стоит сразу пытаться выбрать шаблоны для рефакторинга своих прог. Я тоже, изучив их, сразу ринулся применять шаблоны, как результат - переделывал по нескольку раз, и еще доводил до слез пользователей, т.к. после переделки не совсем хорошо тестировал. Тут лучше поднабраться опыта и применять их для новых программ.
Вообще еще помимо GoF, обязательно почитайте про шаблоны GRASP - очень важные принципы, которые помогут правилно мыслить при проектировании ООП систем.
...
Рейтинг: 0 / 0
Где описывать структуру данных?
    #36381317
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XDiaBLo,

По GRASP книга:
ПРИМЕНЕНИЕ UML И ШАБЛОНОВ ПРОЕКТИРОВАНИЯ. Введение в объектно-ориентированный анализ и проектирование. Крэг Ларман.
Супер книга, которую я в свое время купил супер поздно
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Где описывать структуру данных?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]