Код как низкоуровневая документация

27
Код как низкоуровневая документация Михаил Гуренков Андрей Свердлов

description

Код как низкоуровневая документация, Михаил Гуренков, Андрей Свердлов, Клуб MAInfo.ru

Transcript of Код как низкоуровневая документация

Page 1: Код как низкоуровневая документация

Код как низкоуровневая документация

Михаил Гуренков

Андрей Свердлов

Page 2: Код как низкоуровневая документация

Программа – штука непростая

Page 3: Код как низкоуровневая документация

Как описать программу?

Page 4: Код как низкоуровневая документация

Спецификация программы –

описание системы, которое полностью определяет ее цель и функциональные возможности.

Глоссарий.ру

Page 5: Код как низкоуровневая документация

PERT-time

Page 6: Код как низкоуровневая документация

Еда

1.2.3.Центреды

Кошки

1.2.4.Центр

размнож.

Удовольствие

1.2.1.Мяука-

лкаМяу!

DFD

Page 7: Код как низкоуровневая документация

IDEF0

1. Кошка

Еда

Кошки

Хозяин

Мяу!

Отходы

Квартира Лоток

Page 8: Код как низкоуровневая документация

UML

КошкаКличка : string

Возраст : unsigned int

Ходить ()

Есть ()

Спать ()

Центр еды

Есть ()

Центр сна

Спать () 1 1

1 1

ЕдаКоличество : unsigned int * *

Мяу!Громкость : unsigned int

Удовольствие

* 1 *

1..* 1

Page 9: Код как низкоуровневая документация

Еда

1.2.3.Центреды

Кошки

1.2.4.Центр

размнож.

Удовольствие

1.2.1.Мяука-

лкаМяу!

DFD IDEF0

1. Кошка

Еда

Кошки

Хозяин

Мяу!

Отходы

Квартира Лоток

UML

КошкаКличка : string

Возраст : unsigned int

Ходить ()

Есть ()

Спать ()

Центр еды

Есть ()

Центр сна

Спать () 1 1

1 1

ЕдаКоличество : unsigned int * *

Мяу!Громкость : unsigned int

Удовольствие

* 1 *

1..* 1

Page 10: Код как низкоуровневая документация
Page 11: Код как низкоуровневая документация

Filters

Configuration

UserInterface

DataAccess

Domain

Page 12: Код как низкоуровневая документация

Как описать этот модуль?

Filters

Page 13: Код как низкоуровневая документация

Самодокументирующийся код

1. найти, где изменить

2. понять как

Page 14: Код как низкоуровневая документация

1. Декомпозиция

Функции:

• Получить прайс для импорта

• Получить описание

• Вытащить данные из Excel

• Обработать данные

• Записать данные

Page 15: Код как низкоуровневая документация

2. Шаблоны проектирования

Page 16: Код как низкоуровневая документация

2. Шаблоны проектирования

Page 17: Код как низкоуровневая документация

3. Именование

public class XOrder

{

public void Remove ();

}

public class XItem

{

public void Delete ();

}

Page 18: Код как низкоуровневая документация

3. Именование

public class XOrder

{

public void Remove ();

}

public class XItem

{

public void Remove ();

}

Page 19: Код как низкоуровневая документация

3. Именование

public class XOrder

{

public void Delete ();

}

public class XItem

{

public void Delete ();

}

Page 20: Код как низкоуровневая документация

3. Именование

public class XUserMB

{

int m_i;

public int NofUrMail ();

}

Page 21: Код как низкоуровневая документация

3. Именование

public class XUserMailBox{ int m_NumberOfLetters;

public int UnreadLetters { get {…} } …}

Page 22: Код как низкоуровневая документация

4. Обратная связьpublic XOrderService FindInstallationOrder(){ if (Resource == null) { return null; } …}

Page 23: Код как низкоуровневая документация

4. Обратная связьpublic XOrderService FindInstallationOrder(){ if (Resource == null) { throw new InvalidOperationException("Не указан ресурс"); } …}

Page 24: Код как низкоуровневая документация

5. Модульные тесты[Test]public void OrderStatusController(){ XOrder order = XOrderRepository.Instance.Create(XOrderTypeRepository.Instance.Find(1)); order.Company = TestObjects.Company;

Assert.IsFalse(XOrderStatusController.Instance.IsChanged(order)); order.Save(); XOrderStatusController.Instance.RegisterVersion(order); Assert.IsFalse(XOrderStatusController.Instance.IsChanged(order));

order.BeginEdit(); order.Stages.MoveForward(order.OrderType.Stages.FindById(102)); order.Save(); Assert.IsTrue(XOrderStatusController.Instance.IsChanged(order));

order.BeginEdit();

order.Stages.MoveBack(); order.Save(); Assert.IsTrue(XOrderStatusController.Instance.IsChanged(order));

order = XOrderRepository.Instance.Find(1587); Assert.IsFalse(XOrderStatusController.Instance.IsChanged(order));}

Page 25: Код как низкоуровневая документация

6. Рефакторинг

Что творится с проектом:

• Меняются требования

• Меняется видение архитектуры

• Меняется структура

• Ухудшается код

Что же делать?

Page 26: Код как низкоуровневая документация

7. Комментарии

• неочевидная реализация

• алгоритмы (сложные описываются в дополнительных документах)

• актуальность!

• иногда проще написать коммент, чем понятный код

Page 27: Код как низкоуровневая документация

Вывод: высокий стиль есть гуд

Пейте, дети, молоко – будете здоровы!