Гость
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Разбиение кода на не связные куски / 15 сообщений из 15, страница 1 из 1
20.12.2012, 15:53
    #38086996
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Разбирал я тут как-то чужой код, купленная складская система без исходников и без API, вся логика в формах.
Причем логика это генерация SQL-запросов и отправка их на сервер, т.е. на сервере хранимок нет.

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

И вот жеж вроде везде пишут, что логика должна быть отделена от интерфейса и слои и модули и т.д. и т.п.
Но программисты просто хрен положили на всё это, продолжают формоклепанием заниматься.

В чем проблема то? Я никак не пойму, чего программистам не хватает? Мозгов?
Не знают как разложить логику по разным слоям и разным кускам? Как развязать разные куски кода?


Вот я недавно наколбасил некую платформу для создания сценариев бизнес-логики.
За основу взял шаблон Command. Получил набор (репозиторий) команд для разных случаев жизни.

Как пример, отправить письмо, сформировать отчет xml, загнать данные в таблицу, прочитать xls файл в DataTable
и т.д. и т.п. Создание новой команды занятие простое. Создаем новый класс, наследник одного из базовых, перекрываем пару методов, регистрируем в репозитории и всё, можно использовать. В итоге можно создавать сценарии, выполняющие что угодно.

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

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
AppLogic.ProcessManager pm = new AppLogic.ProcessManager(); // Синглетон
pm.Repository = new AppLogic.XmlRepository(@"..\Xml\Repository"); // Репозиторий, где хранятся описания всех команд
AppLogic.Command cmd = pm.CreateCommand("PrintExcelReport"); // Получения экземпляра команды через Reflection

// Инициализация параметров
cmd.Param("ConnectionString").Value = @"data source=WMS\TEST;user id=sa;Password=1111;initial catalog=DB";
cmd.Param("TemplateFileName").Value = @"..\ReportDocuments\ActDiffrence.xml";
cmd.Param("SQL").Value = "exec OR_ActDiff_Print '7732'";

// И собственно выполнение
cmd.Execute(null, "");




В данном случае командой является сценарий, который состоит из набора других команд и имеет такой же интерфейс как и любая другая команда.

// Описание сценария выглядит так

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
<?xml version="1.0" encoding="windows-1251" ?>
<PrintExcelReport Caption="Отчет Excel">
  <var name="ErrorMessage" />
  <var name="Connection" />
  <var name="ReportData" />
  <var name="ReportFileName" />
  <param name="ConnectionString" />
  <param name="TemplateFileName" />
  <param name="SQL" />
  <command name="TryCatch" caption="Обработка ошибок">
    <param name="ErrorMessage" output="">$ErrorMessage</param>
    <try>
      <command name="CreateSQLConnection" caption="Соединение с базой">
        <param name="ConnectionString">$ConnectionString</param>
        <param name="Connection" output="">$Connection</param>
      </command>
      <command name="SQLQueryXml" caption="Формирование данных">
        <param name="Connection">$Connection</param>
        <param name="SQL">$SQL</param>
        <param name="ParamDefs"></param>
        <param name="ParamValues"></param>
        <param name="XmlDocument">$ReportData</param>
      </command>
      <command name="ExcelReport" caption="Отчет Excel">
        <param name="ReportFileName">$ReportFileName</param>
        <param name="ReportCaption">Список погрузки</param>
        <param name="TemplateFileName">$TemplateFileName</param>
        <param name="ReportData">$ReportData</param>
      </command>
      <command name="OpenShell">
        <param name="Application">Excel.exe</param>
        <param name="Arguments">$ReportFileName</param>
      </command>
    </try>
    <catch>
      <command name="ShowMessage">
        <param name="Message">$ErrorMessage</param>
      </command>
    </catch>  
  </command>
</PrintExcelReport>




Теперь я эти команды могу собирать в совершенно любой конфигурации. И последовательно и иерархически и циклически.
И даже сделал такие команды как IF, TRY(CATCH), FOREACH, SWITCH.

Причем большинство (подавляющее) тех, кому я это показываю, не понимают что это и зачем.
Зачем выдумывать, если можно на форму бросить кнопку и в обработчике написать код.
...
Рейтинг: 0 / 0
20.12.2012, 16:14
    #38087051
очевидно
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Old Nick,
это назвают сервисно-ориентированной архитектурой.
...
Рейтинг: 0 / 0
20.12.2012, 16:22
    #38087071
_3833_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Old Nick Разбирал я тут как-то чужой код , купленная складская система без исходников и без API, вся логика в формах.

как можно код разбирать если его нет?
...
Рейтинг: 0 / 0
23.12.2012, 09:21
    #38089473
Goffman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
писать программу в хмл это на любителя
...
Рейтинг: 0 / 0
23.12.2012, 11:19
    #38089500
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Old NickПричем большинство (подавляющее) тех, кому я это показываю, не понимают что это и зачем.На любом нормальном языке программирования ваш код, оформленный в виде xml занял бы три-четыре строки и был бы на порядок читабельнее и понятнее. Вас проклянут те, кто вынужден будет сопровождать вашу поделку.
...
Рейтинг: 0 / 0
23.12.2012, 12:56
    #38089572
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Old NickВ чем проблема то? Я никак не пойму, чего программистам не хватает? Мозгов?
Не знают как разложить логику по разным слоям и разным кускам? Как развязать разные куски кода?Мозгов или опыта, а может просто инфантильность, работают как привыкли. Лидера нету, который поставит разработку.

Old NickВот я недавно наколбасил некую платформу для создания сценариев бизнес-логики.
...
Теперь я эти команды могу собирать в совершенно любой конфигурации. И последовательно и иерархически и циклически.
И даже сделал такие команды как IF, TRY(CATCH), FOREACH, SWITCH.А это, более традиционные способы, типа серверная логика в ХП, чем не подошли?
...
Рейтинг: 0 / 0
24.12.2012, 13:37
    #38090589
rovan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
TC, а вы это к чему вообще? Пишете про мягкое, в пример приводите тёплое. Хотите похоливарить о низком уровне разработки? Или похвастаться скриптовым языком из XMLя?
...
Рейтинг: 0 / 0
24.12.2012, 17:02
    #38090954
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Bogdanov Andrey,

Я и сам проклял бы, да вот незадача, это задание руководства сделать так :-)
Как попросили, так и сделал
...
Рейтинг: 0 / 0
25.12.2012, 09:17
    #38091473
Bogdanov Andrey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Old NickЯ и сам проклял бы, да вот незадача, это задание руководства сделать так :-)
Как попросили, так и сделалТогда тем более непонятен смысл вашего поста. Если вы сами считаете сделанное вами решение неудачным, вынужденной уступкой требованиям руководства, то неужели вы думаете, что решение найдет активную поддержку у сообщества?
Или вы ищете того, кто бы это покритиковал?
...
Рейтинг: 0 / 0
25.12.2012, 09:25
    #38091475
Old Nick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Bogdanov Andrey,

Вообще-то речь не о том, что программирование в xml, а о том, что можно код разбивать на самостоятельные куски, полностью независимые друг от друга. Такое редко увидишь даже в промышленных системах.
А у меня вместо программирования на xml можно превратить команды в компоненты и прямо в студии собирать сценарии, что гораздо удобнее в разработке. Эти возможности как раз и вытекают из того, что логика разбита на отдельные независимые кусочки.

То есть есть команды существуют сами по себе, и их можно собирать в целостную логику и с помощью xml и в виде компонент.

Люди, пишите грамотно
...
Рейтинг: 0 / 0
25.12.2012, 11:48
    #38091635
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Bogdanov AndreyOld NickЯ и сам проклял бы, да вот незадача, это задание руководства сделать так :-)
Как попросили, так и сделалТогда тем более непонятен смысл вашего поста. Если вы сами считаете сделанное вами решение неудачным, вынужденной уступкой требованиям руководства, то неужели вы думаете, что решение найдет активную поддержку у сообщества?
Или вы ищете того, кто бы это покритиковал?Вот именно, непонятен посыл.

Old NickBogdanov Andrey,

Вообще-то речь не о том, что программирование в xml, а о том, что можно код разбивать на самостоятельные куски, полностью независимые друг от друга. Такое редко увидишь даже в промышленных системах.Безусловно, такое разделение намного хуже писания кода запросов напрямую в формах, это можно не сомневаться.
Old NickА у меня вместо программирования на xml можно превратить команды в компоненты и прямо в студии собирать сценарии, что гораздо удобнее в разработкеДык это ваша идея или всё таки руководства??? :-)
...
Рейтинг: 0 / 0
25.12.2012, 12:57
    #38091783
Cane Cat Fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Old Nick
Код: xml
1.
2.
  <command name="TryCatch" caption="Обработка ошибок">
      <command name="CreateSQLConnection" caption="Соединение с базой">


Причем большинство (подавляющее) тех, кому я это показываю, не понимают что это и зачем.


xml command name="TryCatch" - это сурово. Откройте для себя какой-нибудь скриптовый язык вроде Perl и наслаждайтесь алгоритмической чистотой и отсутствием кнопок и обработчиков.

А по поводу независимости кусков... То от языка это как-бы и не зависит. В одном крайнем случае, если эти Ваши "команды" работают с базой независимо друг от друга и ReadOnly (например, формируют отчеты) - то они будут логически независимы, даже если впихнуть их в один файл-модуль. А если они что-то пишут, друг на друга в чем-то надеются, и взаимно зависят - то даже в виде россыпи XML-файлов они будут представлять собой чудную логическую лапшу, не хуже BASIC-кода с кучей GOTO; и "компоновать" из них что-то - все равно что пазлы складывать: у каждого файла - свое единственное место, а иначе не заработает.
...
Рейтинг: 0 / 0
25.12.2012, 13:28
    #38091864
_1815_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Old NickВообще-то речь не о том, что программирование в xml, а о том, что можно код разбивать на самостоятельные куски, полностью независимые друг от друга. Такое редко увидишь даже в промышленных системах.

интересно, а какие промышленные анализировали? С SAP надеюсь начинали?
...
Рейтинг: 0 / 0
25.12.2012, 13:45
    #38091890
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Cane Cat Fisherони будут представлять собой чудную логическую лапшу, не хуже BASIC-кода с кучей GOTO;
Хуже. В смысле, лучше. В смысле лапшистее.

П.С. До сих пор мне казалось, что похожие внешне решения пишут мальчики лет двадцати на своей первой работе, после года работы по специальности и обретения желания "забабахать чё-то крутое".
...
Рейтинг: 0 / 0
25.12.2012, 15:21
    #38092070
iscrafm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разбиение кода на не связные куски
Cane Cat FisherА если они что-то пишут, друг на друга в чем-то надеются, и взаимно зависят - то даже в виде россыпи XML-файлов они будут представлять собой чудную логическую лапшу, не хуже BASIC-кода с кучей GOTO; и "компоновать" из них что-то - все равно что пазлы складывать: у каждого файла - свое единственное место, а иначе не заработает.
1. не зависят.
2. не надеются.
3. не одно единственное место, заработает.

поищите в интернет информацию о том, как выглядят SOA системы. Информации много, сможете более подробно узнать опровержения на все свои неправильные "домыслы". ТС действительно сделал какой-то вариант SOA, пусть и в таком виде.
...
Рейтинг: 0 / 0
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Разбиение кода на не связные куски / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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