SlideShare a Scribd company logo
Как не загреметь в долговую 
яму? 
О том, что сделать в самом начале, 
чтобы не было мучительно больно 
через пару лет.
Технический долг 
Рефакторинг = погашение основного долга, 
Поддержка легаси-кода = уплата процентов. 
Все как в жизни, господа!
Не пользуйтесь кредитными картами ;) 
1) Есть соблазн купить что-то ненужное 
2) По кредитке - дикие проценты 
3) Уж если воспользовались – гасите долг сразу! 
Нельзя писать такой код, который писать не 
следует. А если написали – рефакторинг 
сразу. Не дайте ему обрасти процентами.
Cache – это объектная среда. 
И правила тут такие же, как 
в любой объектной среде.* 
* Следуйте принципам SOLID
Изолируйте данные 
• Не позволяйте persistent-классам менять данные, 
которые они описывают. 
• Создайте для хранимых классов абстрактные 
интерфейсы. 
• Управляйте данными только из бизнес-логики, но 
не наоборот.
Изолируйте Embedded-SQL 
П.1. Он порождает связанность 
кода. 
Этого достаточно.
Нужно больше золота! 
Создавайте больше абстракций – это: 
1) Упорядочивает структуру программы 
2) Упорядочивает мысли программиста 
3) Снижает связанность системы 
Cache позволяет множественное 
наследование.
Немного псевдокода 
/// Слой доступа к данным 
Class RealCustomer Extends AbstractCustomer { 
Property customerPersistent As CustomerPersistent; 
Property customerGoodsPersistent As %List of CustomerGoodsPersistent; 
Method Buy(goods As AbstractGoods) { 
Do ..customerGoodsPersistent.Insert(goods) 
} 
} 
/// Слой бизнес-логики 
Class BuyerBusinessLogic { 
Property buyer As AbstractCustomer; 
Property goods As %List of AbstractGoods; 
Method confirmOrder() { 
For i = 1:1:..goods.Count() { 
Set sc = ..buyer.Buy(..goods.GetAt(i)) 
} 
} 
} 
/// Слой абстракции 
Class AbstractCustomer [ Abstract ] { 
Method Buy() {} 
}
Генерация кода – зло?! 
Проблемы: 
• Затрудняет отладку 
• Нарушает архитектуру 
Решения: 
• Повышает гибкость 
• Уменьшает количество кода 
Используйте только там, где без этого не 
обойтись.
Модуль = пакет 
• Выделяйте модули 
• Создавайте интерфейс доступа к модулю 
Этим вы откроете себе дорогу к: 
• Быстрой замене одного модуля другим 
• Доступу к функциональности через единый 
интерфейс 
Рефакторинг архитектуры – слишком дорогое 
удовольствие. Но он всегда оправдан.*
Спасибо за внимание! ;) 
Павлов Денис Сергеевич 
Холдинг «Монастырев и Ко» 
Вопросы можно задавать по электропочте: 
me@futurelink.ru
А кто уже засел в проблемах -

More Related Content

Viewers also liked

PAAM is Beyond Extraordinary
PAAM is Beyond ExtraordinaryPAAM is Beyond Extraordinary
PAAM is Beyond Extraordinary
Annie Longley
 
صيانة 2
صيانة 2صيانة 2
صيانة 2
Manar Yasser
 
Bilan de l'EntrepreneurSHIP Festival 2016 !
Bilan de l'EntrepreneurSHIP Festival 2016 !Bilan de l'EntrepreneurSHIP Festival 2016 !
Bilan de l'EntrepreneurSHIP Festival 2016 !
Jean-Baptiste Say Institute
 
Managing the repertoire final
Managing the repertoire finalManaging the repertoire final
Managing the repertoire final
Maidah Masood
 
The ChairEEEE at Viva Technology: the 1st Lenovo Hackaton
The ChairEEEE at Viva Technology: the 1st Lenovo HackatonThe ChairEEEE at Viva Technology: the 1st Lenovo Hackaton
The ChairEEEE at Viva Technology: the 1st Lenovo Hackaton
Jean-Baptiste Say Institute
 
Communicationskillsppt 090821111232-phpapp01
Communicationskillsppt 090821111232-phpapp01Communicationskillsppt 090821111232-phpapp01
Communicationskillsppt 090821111232-phpapp01
Karan Sharma
 
Amanda Rogers IMR Post
Amanda Rogers IMR PostAmanda Rogers IMR Post
Amanda Rogers IMR Post
ethan tussey
 
Offre de stage designer graphiste début mi-septembre 2016
Offre de stage designer graphiste début mi-septembre 2016Offre de stage designer graphiste début mi-septembre 2016
Offre de stage designer graphiste début mi-septembre 2016
Jean-Baptiste Say Institute
 
EntrepreneurSHIP Festival 2016
EntrepreneurSHIP Festival 2016EntrepreneurSHIP Festival 2016
EntrepreneurSHIP Festival 2016
Jean-Baptiste Say Institute
 
Images
ImagesImages
Images
RPMcMurphy
 
Winter Kokoli What Bear Grylls can’t do
Winter Kokoli What Bear Grylls can’t doWinter Kokoli What Bear Grylls can’t do
Winter Kokoli What Bear Grylls can’t do
ethan tussey
 
tik bab 1
tik bab 1tik bab 1
tik bab 1
Rizatun
 
Essere e non essere. Una storia di accettazione.
Essere e non essere. Una storia di accettazione.Essere e non essere. Una storia di accettazione.
Essere e non essere. Una storia di accettazione.
RPMcMurphy
 
Vernissage Improbable Citoyen ★ Exposition d'Art Effectual
Vernissage Improbable Citoyen ★ Exposition d'Art EffectualVernissage Improbable Citoyen ★ Exposition d'Art Effectual
Vernissage Improbable Citoyen ★ Exposition d'Art Effectual
Jean-Baptiste Say Institute
 
The rebecca riots
The rebecca riotsThe rebecca riots
The rebecca riots
Rehana Tariq
 
Bab 2
Bab 2Bab 2
Bab 2
Rizatun
 
Come un cerambice
Come un cerambiceCome un cerambice
Come un cerambice
RPMcMurphy
 
hard disk
hard diskhard disk
hard disk
Soma Elsaby
 
Gabriel García Márquez
Gabriel García MárquezGabriel García Márquez
Gabriel García Márquez
Erick Bernal
 
Anoop Saxena_CV_Bharat it
Anoop Saxena_CV_Bharat itAnoop Saxena_CV_Bharat it
Anoop Saxena_CV_Bharat it
Anoop Saxena
 

Viewers also liked (20)

PAAM is Beyond Extraordinary
PAAM is Beyond ExtraordinaryPAAM is Beyond Extraordinary
PAAM is Beyond Extraordinary
 
صيانة 2
صيانة 2صيانة 2
صيانة 2
 
Bilan de l'EntrepreneurSHIP Festival 2016 !
Bilan de l'EntrepreneurSHIP Festival 2016 !Bilan de l'EntrepreneurSHIP Festival 2016 !
Bilan de l'EntrepreneurSHIP Festival 2016 !
 
Managing the repertoire final
Managing the repertoire finalManaging the repertoire final
Managing the repertoire final
 
The ChairEEEE at Viva Technology: the 1st Lenovo Hackaton
The ChairEEEE at Viva Technology: the 1st Lenovo HackatonThe ChairEEEE at Viva Technology: the 1st Lenovo Hackaton
The ChairEEEE at Viva Technology: the 1st Lenovo Hackaton
 
Communicationskillsppt 090821111232-phpapp01
Communicationskillsppt 090821111232-phpapp01Communicationskillsppt 090821111232-phpapp01
Communicationskillsppt 090821111232-phpapp01
 
Amanda Rogers IMR Post
Amanda Rogers IMR PostAmanda Rogers IMR Post
Amanda Rogers IMR Post
 
Offre de stage designer graphiste début mi-septembre 2016
Offre de stage designer graphiste début mi-septembre 2016Offre de stage designer graphiste début mi-septembre 2016
Offre de stage designer graphiste début mi-septembre 2016
 
EntrepreneurSHIP Festival 2016
EntrepreneurSHIP Festival 2016EntrepreneurSHIP Festival 2016
EntrepreneurSHIP Festival 2016
 
Images
ImagesImages
Images
 
Winter Kokoli What Bear Grylls can’t do
Winter Kokoli What Bear Grylls can’t doWinter Kokoli What Bear Grylls can’t do
Winter Kokoli What Bear Grylls can’t do
 
tik bab 1
tik bab 1tik bab 1
tik bab 1
 
Essere e non essere. Una storia di accettazione.
Essere e non essere. Una storia di accettazione.Essere e non essere. Una storia di accettazione.
Essere e non essere. Una storia di accettazione.
 
Vernissage Improbable Citoyen ★ Exposition d'Art Effectual
Vernissage Improbable Citoyen ★ Exposition d'Art EffectualVernissage Improbable Citoyen ★ Exposition d'Art Effectual
Vernissage Improbable Citoyen ★ Exposition d'Art Effectual
 
The rebecca riots
The rebecca riotsThe rebecca riots
The rebecca riots
 
Bab 2
Bab 2Bab 2
Bab 2
 
Come un cerambice
Come un cerambiceCome un cerambice
Come un cerambice
 
hard disk
hard diskhard disk
hard disk
 
Gabriel García Márquez
Gabriel García MárquezGabriel García Márquez
Gabriel García Márquez
 
Anoop Saxena_CV_Bharat it
Anoop Saxena_CV_Bharat itAnoop Saxena_CV_Bharat it
Anoop Saxena_CV_Bharat it
 

Similar to Intersystems Cache - Как не загреметь в долговую яму

Кастомная разработка в области E-Commerce
Кастомная разработка в области E-CommerceКастомная разработка в области E-Commerce
Кастомная разработка в области E-Commerce
DZ Systems
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Dmytro Mindra
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
Alexander Gornik
 
Презентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьПрезентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начать
Dmitriy Polisadov
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
e-Legion
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
GetDev.NET
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняLuxoftTraining
 
Модульная структура
Модульная структураМодульная структура
Модульная структура
Denis Tsvettsih
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
Dev2Dev
 
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнесаФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
Экосистемные Проекты Фрии
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Ontico
 
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложенияЕсть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
Nicolay Velizhanin
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
Andrei Kaleshka
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
HappyDev
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Dmytro Zharii
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыUA Mobile
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsAnton Vidishchev
 

Similar to Intersystems Cache - Как не загреметь в долговую яму (20)

Кастомная разработка в области E-Commerce
Кастомная разработка в области E-CommerceКастомная разработка в области E-Commerce
Кастомная разработка в области E-Commerce
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Презентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начатьПрезентация: 1С-Bitrix — как начать
Презентация: 1С-Bitrix — как начать
 
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
#MBLTdev: Практический пример переиспользования кода. Как повысить качество и...
 
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
Создание повторно используемых бизнес моделей с помощью технологии Domain Com...
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
Soft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровняSoft labs. достижима ли в c++ эффективность языка среднего уровня
Soft labs. достижима ли в c++ эффективность языка среднего уровня
 
Модульная структура
Модульная структураМодульная структура
Модульная структура
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнесаФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
ФРИИ интернет предпринимательство - Приложения и сервисы для бизнеса
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложенияЕсть ли жизнь с ORM или типовая архитектура CRUD приложения
Есть ли жизнь с ORM или типовая архитектура CRUD приложения
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
 
Павел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузерыПавел Юрийчук - Разработка приложений под мобильные браузеры
Павел Юрийчук - Разработка приложений под мобильные браузеры
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
 

Intersystems Cache - Как не загреметь в долговую яму

  • 1. Как не загреметь в долговую яму? О том, что сделать в самом начале, чтобы не было мучительно больно через пару лет.
  • 2. Технический долг Рефакторинг = погашение основного долга, Поддержка легаси-кода = уплата процентов. Все как в жизни, господа!
  • 3. Не пользуйтесь кредитными картами ;) 1) Есть соблазн купить что-то ненужное 2) По кредитке - дикие проценты 3) Уж если воспользовались – гасите долг сразу! Нельзя писать такой код, который писать не следует. А если написали – рефакторинг сразу. Не дайте ему обрасти процентами.
  • 4. Cache – это объектная среда. И правила тут такие же, как в любой объектной среде.* * Следуйте принципам SOLID
  • 5. Изолируйте данные • Не позволяйте persistent-классам менять данные, которые они описывают. • Создайте для хранимых классов абстрактные интерфейсы. • Управляйте данными только из бизнес-логики, но не наоборот.
  • 6. Изолируйте Embedded-SQL П.1. Он порождает связанность кода. Этого достаточно.
  • 7. Нужно больше золота! Создавайте больше абстракций – это: 1) Упорядочивает структуру программы 2) Упорядочивает мысли программиста 3) Снижает связанность системы Cache позволяет множественное наследование.
  • 8. Немного псевдокода /// Слой доступа к данным Class RealCustomer Extends AbstractCustomer { Property customerPersistent As CustomerPersistent; Property customerGoodsPersistent As %List of CustomerGoodsPersistent; Method Buy(goods As AbstractGoods) { Do ..customerGoodsPersistent.Insert(goods) } } /// Слой бизнес-логики Class BuyerBusinessLogic { Property buyer As AbstractCustomer; Property goods As %List of AbstractGoods; Method confirmOrder() { For i = 1:1:..goods.Count() { Set sc = ..buyer.Buy(..goods.GetAt(i)) } } } /// Слой абстракции Class AbstractCustomer [ Abstract ] { Method Buy() {} }
  • 9. Генерация кода – зло?! Проблемы: • Затрудняет отладку • Нарушает архитектуру Решения: • Повышает гибкость • Уменьшает количество кода Используйте только там, где без этого не обойтись.
  • 10. Модуль = пакет • Выделяйте модули • Создавайте интерфейс доступа к модулю Этим вы откроете себе дорогу к: • Быстрой замене одного модуля другим • Доступу к функциональности через единый интерфейс Рефакторинг архитектуры – слишком дорогое удовольствие. Но он всегда оправдан.*
  • 11. Спасибо за внимание! ;) Павлов Денис Сергеевич Холдинг «Монастырев и Ко» Вопросы можно задавать по электропочте: me@futurelink.ru
  • 12. А кто уже засел в проблемах -