12
Как не загреметь в долговую яму? О том, что сделать в самом начале, чтобы не было мучительно больно через пару лет.

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

Embed Size (px)

Citation preview

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

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

О том, что сделать в самом начале, чтобы не было мучительно больно

через пару лет.

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

Технический долг

Рефакторинг = погашение основного долга, Поддержка легаси-кода = уплата процентов.

Все как в жизни, господа!

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

Не пользуйтесь кредитными картами ;)

1) Есть соблазн купить что-то ненужное2) По кредитке - дикие проценты3) Уж если воспользовались – гасите долг сразу!

Нельзя писать такой код, который писать не следует. А если написали – рефакторинг

сразу. Не дайте ему обрасти процентами.

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

Cache – это объектная среда.

И правила тут такие же, как в любой объектной среде.*

* Следуйте принципам SOLID

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

Изолируйте данные

• Не позволяйте persistent-классам менять данные, которые они описывают.

• Создайте для хранимых классов абстрактные интерфейсы.

• Управляйте данными только из бизнес-логики, но не наоборот.

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

Изолируйте Embedded-SQL

П.1. Он порождает связанность кода.

Этого достаточно.

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

Нужно больше золота!

Создавайте больше абстракций – это:

1) Упорядочивает структуру программы2) Упорядочивает мысли программиста3) Снижает связанность системы

Cache позволяет множественное наследование.

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

Немного псевдокода

/// Слой бизнес-логики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 RealCustomer Extends AbstractCustomer { Property customerPersistent As CustomerPersistent; Property customerGoodsPersistent As %List of CustomerGoodsPersistent; Method Buy(goods As AbstractGoods) { Do ..customerGoodsPersistent.Insert(goods) }}

/// Слой абстракцииClass AbstractCustomer [ Abstract ] { Method Buy() {}}

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

Генерация кода – зло?!

Проблемы:• Затрудняет отладку• Нарушает архитектуруРешения:• Повышает гибкость• Уменьшает количество кода

Используйте только там, где без этого не обойтись.

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

Модуль = пакет• Выделяйте модули• Создавайте интерфейс доступа к модулю

Этим вы откроете себе дорогу к:• Быстрой замене одного модуля другим• Доступу к функциональности через единый

интерфейс

Рефакторинг архитектуры – слишком дорогое удовольствие. Но он всегда оправдан.*

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

Спасибо за внимание! ;)

Павлов Денис СергеевичХолдинг «Монастырев и Ко»

Вопросы можно задавать по электропочте:[email protected]

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

А кто уже засел в проблемах -