Предложения за некласически шаблони за дизайн

141 views
Skip to first unread message

Николай Василев

unread,
Nov 28, 2011, 3:13:37 PM11/28/11
to design-pat...@googlegroups.com
Привет,

Планирането и подготвителната работа по книгата текат с пълна сила.

Появиха се няколко въпросителни около една част от книгата и решихме да се допитаме до общността, за да може съдържанието на книгата да е максимално актуално и да бъде със съответното качество, към което се стремим да постигнем. 

Преди да зададем въпросите обаче, ето малко повече информация, за това как ще изглежда книгата. Решихме, че ще е добре книгата да бъде организирана в четири основни части. В момента организацията е следната, като предстои още един анализ на материала (най-вероятно след идните почивни дни), при който ще се изясни окончателната структура:
  • Част 1. Програмен дизайн - общи положения
      • Глава 1. Основни етапи от разработката на софтуер
      • Глава 2. Обектно-ориентиран дизайн
      • Глава 3. Кратко въведение в UML
      • Глава 4. Основни принципи на дизайна на софтуер

  • Част 2. Класически шаблони за дизайн
      • Глава 5. Шаблони за дизайн - въведение
    • Шаблони за създаване на обекти (Creational Patterns)
      • Глава 6. Абстрактна фабрика (Abstract Factory)
      • Глава 7. Строител (Builder)
      • Глава 8. Метод фабрика (Factory Method)
      • Глава 9. Прототип  (Prototype)
      • Глава 10. Сингълтон (Singleton)
    • Структурни шаблони (Structural Patterns)
      • Глава 11. Адаптор (Adapter)
      • Глава 12. Мост (Bridge)
      • Глава 13. Композиция (Composite)
      • Глава 14. Декоратор (Decorator / Wrapper)
      • Глава 15. Фасада (Façade)
      • Глава 16. Миниобект (Flyweight)
      • Глава 17. Прокси (Proxy)
    • Поведенчески шаблони (Behavioral Patterns)
      • Глава 18. Верига от отговорности (Chain of Responsibility)
      • Глава 19. Команда (Command)
      • Глава 20. Интерпретатор (Interpreter)
      • Глава 21. Итератор (Iterator)
      • Глава 22. Посредник (Mediator)
      • Глава 23. Спомен/Мементо (Memento)
      • Глава 24. Наблюдател (Observer)
      • Глава 25. Състояние (State)
      • Глава 26. Стратегия (Strategy)
      • Глава 27. Шаблонен метод (Template Method)
      • Глава 28. Посетител (Visitor)

  • Част 3. Допълнителни шаблони за дизайн

  • Част 4. Приложения (Appendices)
В първата част се очаква да се въведат основни програмни концепции и инструменти, като ООП, базовите диаграми от UML-а, принципи на дизайна на софтуер (напр. Принцип на Лисков, IoC, изолиране на интерфейси (Interface Segregation Principle) и т.н.), които ще се ползват в книгата и които ще са базата, на която ще стъпи описанието на шаблоните. 

Втората част на книгата ще съдържа "класическите" шаблони, т.е. тези дефинирани от GoF. Като структура, главите ще са много близки като структура до тези на GoF, като направихме малки подобрения.

В четвъртата част на книгата, ни се струва, че ще е добре да се сложи всичко, което не е удачно да бъде добавено в никоя от предните части, но по някакъв начин е свързано с основното съдържание (напр. Event Driven Development, AOP, SOA и т.н.). По подобие на първата, видът и на тази част, ще са окончателно ясни идните седмици.

Решихме, че освен класическите шаблони, ще е полезно да добавим и такива, които не са дефинирани от GoF, но се ползват доста често и са доста полезни. Те ще бъдат организирани в третата част на книгата. С тази глава са свързани и нашите въпроси.

За третата част избрахме около десет шаблона, но т.к. критерия за избор позволява доста вариации, решихме да се допитаме до вас и да съберем мнения, кои шаблони ви се струват, че биха могли да бъдат добавени към тази глава, за да имаме по-голям избор и накрая книгата да бъде по-пълна. 

Тези, към които сме насочили са следните:
  • Късно зареждане (Lazy Load) -> тук влиза и късната инициализация, като конкретно приложение на Lazy load-а
  • Празен обект (Null Object) 
  • Обектен пул* (Object Pool) *
  • Шаблон за делегиране (Delegation Pattern)
  • Многослойна архитектура (Layered Architecture)
  • Модел, презентация, контролer (MVC / Model View Controller)
  • Преден контролер (Front Controller) *
  • Помощник на презентацията (View Helper) *
  • "Обект за пренос на данни" (Data Transfer Object) *, известен също като "Обект стойност" (Value Object)
  • "Обект за достъп до данни" (Data Access Object) *, известен също като "Хранилище" (Repository)
  • Спецификация (Specification) - с две думи - предикат, за който се създава клас. Подобрява изразителността на дизайна и прави бизнес правилата изрично изразени, т.е. предотвратява скриването на логиката в примитвните конструкции на езика (if clause).
* приемаме предложения за по-добро наименование

До края на тази седмица (4-ти декември включително) ще очакваме предложенията ви в тази тема и след това ще оформим окончателния вид на структурата на книгата. 

Поздрави,
Цветан Василев
Николай Томитов
Николай Василев

Danail Alexiev

unread,
Nov 29, 2011, 4:08:59 AM11/29/11
to design-pat...@googlegroups.com
Здравейте,

Според мен ще е от полза да се споменат DTO, DAO и MVC.

DTO и DAO са почти неразривна част от всеки слой за достъп до данните и въпреки, че са доста одумвани, са полезни.
MVC е шаблонът, който използват най - известните фреймуърци в Java - Swing, JSF, GWT, Spring MVC... Ако го обясним с думи прости, без да навлизаме
в адски много излишни подробности, ще бъде като добра основа, върху която после читателите могат да надградят, информирайки се за въпросните фреймуърци.

Относно включването на AOP - аз съм твърдо за, но отново трябва да се подбере точния формат, в което това да бъде направено. Дали ще се разглежда AspectJ (което според мен е много обширна тема) или нещо по - орязано и просто за разбиране като Spring AOP, или просто да се даде кратката теоретична основа без много примери. Трябва да подходим внимателно тук, за да не изместим твърде много фокуса на книгата от Design Patterns към AOP.

Това е моето мнение, надявам се да е било полезно.

Поздрави,
Данаил Алексиев

2011/11/28 Николай Василев <nikolay...@gmail.com>
Николай Василев

--
Получихте това съобщение, защото сте абонирани за групата „Design Patterns Book“ в Google Групи.
За да видите тази дискусия в мрежата, посетете https://groups.google.com/d/msg/design-patterns-book/-/bYHAyG_1jlwJ.
За да публикувате в тази група, изпратете имейл до design-pat...@googlegroups.com.
За да прекратите абонамента си за тази група, изпратете имейл до design-patterns-...@googlegroups.com.
За още опции посетете тази група на адрес http://groups.google.com/group/design-patterns-book?hl=bg.

Николай Василев

unread,
Nov 30, 2011, 3:21:52 AM11/30/11
to design-pat...@googlegroups.com
Привет Данаил,

Мерси за споделеното мнение. Хубаво е да знаем, че не сме се отклонили от посоката на книгата и други намират избора на шаблони за добър.

Да, и ние заради причините, които описа избрахме  DTO, DAO и MVC. 
Иначе за дълбочината на обясненията, ние сме на друго мнение -  по-добре е да дадем изчерпателна информация за всеки от шаблоните, за да направим една стойностна книга, отколкото да сложим малко информация и читателя да трябва да разучава детайлите самичък. 
Относно примерните приложения - да, предвидили сме във всяка една от главите да има информация, кои съвременни (и/или известни) програми и платформи (framework-и), използват въпросния шаблон в конкретната глава.

Съдържанието на четвъртата част на книгата е още прекалено неопределено. 
Ще е добре да включваме в нея нещата, които не пасват никъде другаде в книгата, но без да навлизаме в детайли. Просто даваме кратко разяснение (например какво е АОP,  SOA и т.н.), евентуално даваме нагледен пример и толкова. Както и ти каза, не трябва да позволяваме да се размива основната цел на книгата.

Поздрави,
Николай Василев

Цветан Василев

unread,
Dec 1, 2011, 1:22:58 AM12/1/11
to design-pat...@googlegroups.com

  Здравейте,
 
  Как ви се струва превода на предложените допълнителни шаблони?
  Ако имате предложения, ги споделете, защото има някои термини, които се двоумим как да ги преведем.
  Може да помислим за алтернативи, като например:

  Front controller: "Входен контролер"
  Object pool : "Пул от обекти" или "Хранилище за обекти"


  Поздрави,
  Цецо

Svetlin Nakov

unread,
Dec 4, 2011, 11:29:40 AM12/4/11
to design-pat...@googlegroups.com
Чудя се дали не е удачно да се добавят още MVP (Model-View-Presenter) и неговият специалне вариант MVVM (Model-View-View-Model). Последният (MVVM) се ползва изключително много в .NET средите, в технологии като XAML, WPF, Silverlight, Windows Phone 7 и ще се ползва масово в Windows 8, дори има имплементация на JavaScript (освен на C#). При Java не съм го срещал, но това е заради липсата на двупосочни bindings или абстракни действия (команди) в повечето frameworks. Обаче съм го срещал за Android, така че го има и в Java света (вж. http://andytsui.wordpress.com/2011/08/18/tutorial-build-a-simple-android-calculator-with-mvvm-android-binding-part-2/).

Предлагам да добавим MVVM шаблона в секцията "архитектурни патърни" (третата част).

Наков

Svetlin Nakov

unread,
Dec 4, 2011, 11:32:00 AM12/4/11
to design-pat...@googlegroups.com
Преводите на български на мен ми харесват. Единствено предлагам да се слагат в скобки или по друг начин всички варианти на превод, в който може да се срещне шаблона.

Наков

Николай Василев

unread,
Dec 5, 2011, 1:10:44 AM12/5/11
to design-pat...@googlegroups.com
Привет Светльо,

Мерси за предложението!

Аз погледнах всички архитектурни шаблони, още когато ни прати линк предния път и въпросните MVP и MVVM ми се струват, че са частни случаи на MVC. Затова мислех да го включим като подсекции на главата за MVC  (те затова и не са в списъка), но може и да не съм догледал нещо. Щеги прегледам още веднъж, когато правя структурата на документа за MVC, за да не би да ми убягва нещо и ако е така ще ги изнесем в отделни глави/глава.

Поздрави,
Николай В.

Николай Василев

unread,
Dec 5, 2011, 1:12:36 AM12/5/11
to design-pat...@googlegroups.com
Това е добра идея! Не се бяхме сетили за нея. За момента само предвиждахме да имаме списък на английските наименования на шаблоните, но си прав, че трябва да включим и българските алтернативи. Ще го отразим в структурата на главите! Мерси!

Поздрави,
Николай В.

Николай Василев

unread,
Dec 6, 2011, 2:15:00 AM12/6/11
to design-pat...@googlegroups.com
Привет,

Мерси за участието на всички, които се включиха. Сега оформяме третата част на книгата. 

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

Поздрави,
ОЕ

Николай Василев

unread,
Dec 6, 2011, 2:52:42 AM12/6/11
to design-pat...@googlegroups.com
На мен идеята за "Входен контролер" ми харесва. По-добре е от "преден контролер". 
"Хранилище на обекти" ми се струва, че е прекалено близко като звучене до Repository ("Хранилище") и може да стане объркване евентуално. Не знам "pool" как е най-удачно да се преведе на български, така че да има смисъл в контекста на програмирането, но да не звучи неадекватно. Ако има още идеи ще е добре да ги чуем.

Svetlin Ralchev

unread,
Dec 7, 2011, 3:18:14 AM12/7/11
to design-pat...@googlegroups.com
Здравейте,

Добър ресурс за допълитените Design Patterns са Enterprise Patterns, които Чичо Боб споменава в този линк. Ако ги включим и тях ще имаме една изчерпателна книга за Design Patterns.

Поздрави,
Светлин Ралчев

Николай Василев

unread,
Dec 7, 2011, 5:07:57 PM12/7/11
to design-pat...@googlegroups.com
Привет Светлин,

Мерси за информацията! 
Реално ние избирахме некласическите шаблони от няколко книги (PEAA, J2EE Patterns, DDD,  Analysis Patterns, Refactoring to Patterns), повечето от които споменати на сайта на чичо Боб, макар и да няхахме отправна точка този сайт... така че малко или много сме прегледали повечето от шаблоните. 

За съжаление, няма как да включим всички шаблони, които ни харесват и в същото време да имаме книга, която е с разумна големина. Решихме да изберем по-известните/по-често използваните за момента, а за в бъдеще ще има материал за още една книга с по-комплексни шаблони и техни комбинации в конкретни ситуации. Полето за изява в тая област е доста голямо :))

Ако имаш в предвид конкретно някой шаблон, който не сме го включили до момента, а ти се струва, че е хубаво да го има в книгата го кажи и ако можем ще го включим в списъка.

Поздрави,
Николай

2011/12/7 Svetlin Ralchev <svetlin...@gmail.com>

--
Получихте това съобщение, защото сте абонирани за групата „Design Patterns Book“ в Google Групи.
За да видите тази дискусия в мрежата, посетете https://groups.google.com/d/msg/design-patterns-book/-/UKkFInRaSocJ.

За да публикувате в тази група, изпратете имейл до design-pat...@googlegroups.com.
За да прекратите абонамента си за тази група, изпратете имейл до design-patterns-...@googlegroups.com.
За още опции посетете тази група на адрес http://groups.google.com/group/design-patterns-book?hl=bg.



--
Николай Василев
Reply all
Reply to author
Forward
0 new messages