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

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

Upload: constantin-kichinsky

Post on 20-Jun-2015

1.028 views

Category:

Documents


8 download

DESCRIPTION

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

TRANSCRIPT

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: Код как низкоуровневая документация

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

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