SlideShare una empresa de Scribd logo
1 de 41
Синяя Борода.
История одного проекта

     Андрей Майоров
         BYTE-force
     twitter.com/xorets
Agenda
•   Детали проекта
•   В чем сложности?
•   Почему так получилось?
•   Как исправлять ситуацию?
http://www.flickr.com/photos/lofink/4501610335/
Использование и развитие
• Используется в наших веб-проектах
• Развивается по остаточному
  принципу
История развития
XML + XSLT + Transformation script, Classic ASP, JS
Scriptlets, MS SQL, Stored Procedures, XSLT, Pre-
AJAX, ASP.NET, custom HttpHandler, custom XML-
based page renderer, Business Logic in Stored
Procs, XML from SQL Server, XSLT with extensions,
Utility Classes in C#, NHibernate, ObjectQuery
functionality, Automatic mapping Object – XML,
AJAX Backoffice, JS-web services, CRUD, Custom
Event Bus, DI Container (Unity), ASP.NET MVC…
Крупные модернизации
•   Внедрение ORM
•   Преобразование объектов в XML
•   DI container
•   Переходим на ASP.NET MVC
You we are here
Сборок совсем мало




                http://www.flickr.com/photos/lofink/4501610335/
Сегодняшние
проблемы проекта
Сложен reuse частей проекта




                     http://hq-wallpapers.info/tag/Карточный%20домик
Unit tests не работают




                 https://picasaweb.google.com/lh/photo/bdJ2w6x9L1H7kUzDsDSyIg
Сложно развивать систему




     http://sqlblog.com/blogs/merrill_aldrich/archive/2011/08/10/ouch-chasing-the-isv-or-that-code-makes-my-teeth-hurt-t-sql-tuesday-ish-21.aspx
Неясно, куда класть код




                    http://www.flickr.com/photos/lofink/4501610335/
Проблемы – у разработчиков
• Люди боятся
• Люди не понимают
• Людям сложно

   У кода нет проблем:
   работает и не падает.
Основная беда –
монолитность кода
God-классы
• Куча функционала, тысячи строк
• Со временем только растут



                           Зло!
Публичные статические поля
• Singleton.Instance
• Context.Current



                       Зло!
«Магическое» конфигурирование
• Неявное, по первому обращению
• В конструкторе через глобальный
  сервис
• В статическом конструкторе
  • Жесть!
                        Зло!
Слишком большие проекты
• 1000 классов на 9 проектов
• 600 классов – в 2 проектах
• Проекты на ~50 классов живут явно
  лучше других
                         Зло!
«Борода» детектед




                    http://www.kiter.by/2010/07/blog-post.html
Прости, любимая,
так получилось...




          «Очень синяя борода» - Творческое Объединение «Экран».
Надо «расчесать» код




                 http://www.nrk.no/kultur-og-underholdning/1.7321778
Призывы не работают




                 http://www.flickr.com/photos/lofink/4501610335/
Конкретные цели:
    тестопригодный код
    маленькие пэкеджи
Наши текущие проблемы
Слишком много NHibernate
•   За 5 лет проник повсеместно
•   Конфигурируется «магически»
•   Текущая сессия – в контексте запроса
•   Все классы лезут туда напрямую
•   Вспомогательный статический
    класс зависит от HttpRuntime
Ближайшие цели
• Не лазать в базу через контекст запроса
  • Только по прямой ссылке
  • Не лазать из методов доменных объектов
• Подготовиться к другому ORM
Решение
•   Домен – в отдельный пакет
•   Убрать логику из доменных объектов *
•   Сделать обертку для сессии
•   Передавать обертку в сервисы явно

* Уточнение будет позже
«Анемичная» доменная модель
• Модель без поведений
• Фаулер не одобряе:
  • Нужен ОРМ
  • Нет инкапсуляции и полиморфизма
  • Скатываемся в процедурный стиль
Поведение в методе
obj.Publish() –
  инкапсуляция
Publish() везде разный –
  полиморфизм
Настройка под заказчика




• У разных клиентов – разные требования
  к Article.Publish().
Command pattern
В среднесрочной перспективе:
• Убираем логику из доменных объектов
• Реализуем её командами
• Делаем контейнер домена
Запись данных гораздо
   сложнее чтения
CRUD головного мозга




            http://cthulhucrochet.blogspot.com/2010/09/time-to-switch-to-garlic-shampoo.html
CQRS
• Command-Query Responsibility
  Segregation
• Грег Янг
• Начнем с разделения чтения и
  записи
Стратегия разделения на куски
            ? ??
Паттерн vs. Антипаттерн



Попробуй    Никогда
  решить    так
 вот так    не делай!
Вопросы, пожалуйста
   Андрей Майоров
       BYTE-force
  xor@byte-force.com
   twitter.com/xorets
addconf.ru
Пожалуйста, поставьте
 оценку моему докладу.

Ваше мнение очень важно.

        Спасибо!

Más contenido relacionado

La actualidad más candente

Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TKConf
 
Создание темы «с нуля»
Создание темы «с нуля»Создание темы «с нуля»
Создание темы «с нуля»Artem Shymko
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...IT-Portfolio
 
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)Ontico
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...Ilya Kosmodemiansky
 
Илья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.comИлья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.comOntico
 
Real-time данные на фронтенде
Real-time данные на фронтендеReal-time данные на фронтенде
Real-time данные на фронтендеEXANTE
 
Architechture of a social network for 30M users
Architechture of a social network for 30M usersArchitechture of a social network for 30M users
Architechture of a social network for 30M usersFotostrana
 
My talk on administering PostgreSQL
My talk on administering PostgreSQLMy talk on administering PostgreSQL
My talk on administering PostgreSQLAlex Chistyakov
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...IT-Portfolio
 
My talk on PgDay Russia 2014
My talk on PgDay Russia 2014My talk on PgDay Russia 2014
My talk on PgDay Russia 2014Alex Chistyakov
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceEYevseyeva
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Александр Оликевич - OpenFabLab
Александр Оликевич - OpenFabLabАлександр Оликевич - OpenFabLab
Александр Оликевич - OpenFabLabOksana Kurysheva
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Anton Baranov
 

La actualidad más candente (19)

Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.TК°Conf. Организация разработки Frontend. Виталий Слободин.
TК°Conf. Организация разработки Frontend. Виталий Слободин.
 
Создание темы «с нуля»
Создание темы «с нуля»Создание темы «с нуля»
Создание темы «с нуля»
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...
 
Chef @DevWeb
Chef @DevWebChef @DevWeb
Chef @DevWeb
 
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
Ошибки проектирования высоконагруженных проектов / Максим Ехлаков (OneTwoRent)
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...
 
Илья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.comИлья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.com
 
Real-time данные на фронтенде
Real-time данные на фронтендеReal-time данные на фронтенде
Real-time данные на фронтенде
 
Architechture of a social network for 30M users
Architechture of a social network for 30M usersArchitechture of a social network for 30M users
Architechture of a social network for 30M users
 
My talk on administering PostgreSQL
My talk on administering PostgreSQLMy talk on administering PostgreSQL
My talk on administering PostgreSQL
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...
 
My talk on PgDay Russia 2014
My talk on PgDay Russia 2014My talk on PgDay Russia 2014
My talk on PgDay Russia 2014
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Александр Оликевич - OpenFabLab
Александр Оликевич - OpenFabLabАлександр Оликевич - OpenFabLab
Александр Оликевич - OpenFabLab
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...
 

Destacado

Alexander Serbul - Development and administration through testing - cloud ser...
Alexander Serbul - Development and administration through testing - cloud ser...Alexander Serbul - Development and administration through testing - cloud ser...
Alexander Serbul - Development and administration through testing - cloud ser...Andrew Mayorov
 
Dmitry Zavalishin. Successful it-project - where can it fail
Dmitry Zavalishin. Successful it-project - where can it failDmitry Zavalishin. Successful it-project - where can it fail
Dmitry Zavalishin. Successful it-project - where can it failAndrew Mayorov
 
Alexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphicsAlexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphicsAndrew Mayorov
 
Производительность и энергопотребление мобильных приложений на примере Window...
Производительность и энергопотребление мобильных приложений на примере Window...Производительность и энергопотребление мобильных приложений на примере Window...
Производительность и энергопотребление мобильных приложений на примере Window...Andrew Mayorov
 
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"Andrew Mayorov
 
Roman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows AzureRoman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows AzureAndrew Mayorov
 
Alexander Dolgarev "Comparizon of AMQP and Zero MQ"
Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"
Alexander Dolgarev "Comparizon of AMQP and Zero MQ"Andrew Mayorov
 
Как сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиКак сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиAndrew Mayorov
 
Victor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsVictor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsAndrew Mayorov
 
Roman Zdebskiy - Client vs. Browser
Roman Zdebskiy - Client vs. BrowserRoman Zdebskiy - Client vs. Browser
Roman Zdebskiy - Client vs. BrowserAndrew Mayorov
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCAndrew Mayorov
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложенийAndrew Mayorov
 
Построение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БДПостроение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БДAndrew Mayorov
 
(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)Internews Ukraine
 
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?Andrew Mayorov
 
об удобстве иерархических структур данных
об удобстве иерархических структур данныхоб удобстве иерархических структур данных
об удобстве иерархических структур данныхAndrew Mayorov
 
Banana Shelf Life Testing
Banana Shelf Life TestingBanana Shelf Life Testing
Banana Shelf Life Testingshubhamchandra
 

Destacado (20)

Alexander Serbul - Development and administration through testing - cloud ser...
Alexander Serbul - Development and administration through testing - cloud ser...Alexander Serbul - Development and administration through testing - cloud ser...
Alexander Serbul - Development and administration through testing - cloud ser...
 
Dmitry Zavalishin. Successful it-project - where can it fail
Dmitry Zavalishin. Successful it-project - where can it failDmitry Zavalishin. Successful it-project - where can it fail
Dmitry Zavalishin. Successful it-project - where can it fail
 
Alexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphicsAlexander Burt - Inside of 2D-graphics
Alexander Burt - Inside of 2D-graphics
 
Производительность и энергопотребление мобильных приложений на примере Window...
Производительность и энергопотребление мобильных приложений на примере Window...Производительность и энергопотребление мобильных приложений на примере Window...
Производительность и энергопотребление мобильных приложений на примере Window...
 
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
Vsevolod Leonov "Delphi XE2. Visual tools for cross-platform development"
 
Roman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows AzureRoman Zdebskiy - Windows Azure
Roman Zdebskiy - Windows Azure
 
Alexander Dolgarev "Comparizon of AMQP and Zero MQ"
Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"Alexander Dolgarev  "Comparizon of AMQP and Zero MQ"
Alexander Dolgarev "Comparizon of AMQP and Zero MQ"
 
Как сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпутиКак сделать интернет-сайт на SharePoint и не передумать на полпути
Как сделать интернет-сайт на SharePoint и не передумать на полпути
 
Victor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platformsVictor Kuzmin - How to organize service development for several mobile platforms
Victor Kuzmin - How to organize service development for several mobile platforms
 
Roman Zdebskiy - Client vs. Browser
Roman Zdebskiy - Client vs. BrowserRoman Zdebskiy - Client vs. Browser
Roman Zdebskiy - Client vs. Browser
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Проектирование архитектуры приложений
Проектирование архитектуры приложенийПроектирование архитектуры приложений
Проектирование архитектуры приложений
 
Sign Me Up
Sign Me UpSign Me Up
Sign Me Up
 
Построение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БДПостроение индекса по иерархии записей в реляционной БД
Построение индекса по иерархии записей в реляционной БД
 
(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)(Eng) How Social Media Worked In #24godyny project (Updated)
(Eng) How Social Media Worked In #24godyny project (Updated)
 
ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?ObjectXPathNavigator - как и зачем?
ObjectXPathNavigator - как и зачем?
 
Xslt
XsltXslt
Xslt
 
об удобстве иерархических структур данных
об удобстве иерархических структур данныхоб удобстве иерархических структур данных
об удобстве иерархических структур данных
 
Banana Shelf Life Testing
Banana Shelf Life TestingBanana Shelf Life Testing
Banana Shelf Life Testing
 

Similar a Синяя Борода. История одного проекта.

SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноRoman Dvornov
 
JavaScript design patterns overview
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview Kseniya Redunova
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Ontico
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьAndrey Bibichev
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!Roman Dvornov
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Ontico
 

Similar a Синяя Борода. История одного проекта. (20)

SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Sivko
SivkoSivko
Sivko
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
Mobile web apps
Mobile web appsMobile web apps
Mobile web apps
 
Migrate!
Migrate!Migrate!
Migrate!
 
Компонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективноКомпонентный подход: скучно, неинтересно, бесперспективно
Компонентный подход: скучно, неинтересно, бесперспективно
 
JavaScript design patterns overview
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
 
Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)Распространенные ошибки применения баз данных (Сергей Аверин)
Распространенные ошибки применения баз данных (Сергей Аверин)
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Highload 2011-demona
Highload 2011-demonaHighload 2011-demona
Highload 2011-demona
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 

Синяя Борода. История одного проекта.

Notas del editor

  1. Надо проектировать классы так, чтобы их всегда можно было полностью покрыть модульными тестами, подменяя окружение mock'ами.Без баз данныхБез Http-запросовБез тестовых файловПосле или во время этого можно уже делать классы"красивыми", соответствующими принципам и догмам. Надо разбивать проект на мелкие кусочки Рассчитывая на то, что кусочки могут заменяться или использоваться в других проектах.Результаты:Код будет покрыт работающими тестами. Ибо тесты не будут зависеть от базы данных, файловой системы и т.п.Код можнорефакторить до красивого вида. Благо тесты естьМелкие проекты не позволят делать перекрестных ссылокОни заставят вас применять IoC,DI и т.д. чтобы заставить все это работать вместе.
  2. Для нас сейчас стараться писать тестопригодный код – несколько поздно. Код уже написан. Писать тесты к существующему коду – неблагодарная задачаНаша первая глобальная задача – разбить проект на куски ... и уменьшить связность кодаЕе выполнениесостоит из решения отдельных конкретных архитектурных проблем.Далее рассмотрим некоторые имеющиеся проблемы и обсудим возможные пути решения.
  3. Читать данные мы можем по-разному: Через доменную модель Прямой запрос из базы Обращение к хранимой процедуреЗапрос из вообще сторонней базы, типа OLAP.И это все хорошо, если удобно.А записывать удобно через доменную модель и ORM. Понятно – т.к. модель отражает структуру базы.Все бы хорошо, если не одно «но»…
  4. Стратегия разделения проекта на много мелких пакетов – это большой вопрос. Нужно выработать четкие и ясные принципы, понятные всем: Что выделять в отдельный проект? Как его именовать? Как подключать к общему решению?Мнения есть, алгоритма – нет. Пока.
  5. Я не люблю понятие «антипаттерн». Паттерн – позитивная, созидательная сущность. Подход к решению вашей проблемы. Проблема конкретна, подход тоже. Все возможные сложности описаны. Это только предложение, одно из многих.Антипаттерн Это полный запрет, абсолютное отрицание.Ты передаешь доменные объекты во вью? Никогда так не делай! Нельзя! Это антипаттерн.Антипаттерн не подразумевает размышлений. Нельзя и все. Даже не пробуй так делать. Почему? Ну это же известный антипаттерн! (Я крут, а ты лох) Даже если антипаттерн в своем оригинальном описании содержит весьма конкретные условия применения («применение антипаттерна» – звучит), «крутые чуваки» опускают для себя всю сложную часть, оставляя простую:Нельзя, потому что запретил Великий Антипаттерн!Антипаттерн сильно отличается от менее категоричных: Я попробовал сделать так, но у меня не получилось. Ну дак, может, у тебя руки кривые?Этот подход может привести к таким-то проблемам. А может не приведет? Условия-то другие. 5 лет прошло, как никак…Антипаттерну нельзя задать эти вопросы. Ибо он есть Истина В Последней Инстанции. Сравните левую и правую части: Левая открывает новую возможность. Правая закрывает разом все.Пока все, но об этом можно долго.