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

1,284 views

Published on

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

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,284
On SlideShare
0
From Embeds
0
Number of Embeds
31
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Когда приходится писать код? (для себя, по учебе, чаще всего по работе) Почему приходится писать хороший код?
  • Код как низкоуровневая документация

    1. 1. Код как низкоуровневая документация Михаил Гуренков Андрей Свердлов
    2. 2. Программа – штука непростая
    3. 3. Как описать программу?
    4. 4. <ul><li>Спецификация программы – </li></ul><ul><ul><li>описание системы, которое полностью определяет ее цель и функциональные возможности. </li></ul></ul><ul><li>Глоссарий.ру </li></ul>
    5. 5. PERT-time
    6. 6. Еда 1.2.3. Центр еды Кошки 1.2.4. Центр размнож. 1.2.1. Мяука- лка Мяу! DFD Удовольствие
    7. 7. IDEF0 1. Кошка Еда Кошки Хозяин Мяу! Отходы Квартира Лоток
    8. 8. UML 1 1 1 1 * * * 1 * 1..* 1 Кошка Кличка : string Возраст : unsigned int Ходить () Есть () Спать () Центр еды Есть () Центр сна Спать () Еда Количество : unsigned int Мяу! Громкость : unsigned int Удовольствие
    9. 9. Еда 1.2.3. Центр еды Кошки 1.2.4. Центр размнож. 1.2.1. Мяука- лка Мяу! DFD IDEF0 1. Кошка Еда Кошки Хозяин Мяу! Отходы Квартира Лоток UML 1 1 1 1 * * * 1 * 1..* 1 Удовольствие Кошка Кличка : string Возраст : unsigned int Ходить () Есть () Спать () Центр еды Есть () Центр сна Спать () Еда Количество : unsigned int Мяу! Громкость : unsigned int Удовольствие
    10. 11. Filters Configuration UserInterface DataAccess Domain
    11. 12. Как описать этот модуль? Filters
    12. 13. Самодокументирующийся код <ul><li>найти, где изменить </li></ul><ul><li>понять как </li></ul>
    13. 14. 1. Декомпозиция <ul><li>Функции: </li></ul><ul><li>Получить прайс для импорта </li></ul><ul><li>Получить описание </li></ul><ul><li>Вытащить данные из Excel </li></ul><ul><li>Обработать данные </li></ul><ul><li>Записать данные </li></ul>
    14. 15. 2 . Шаблоны проектирования
    15. 16. 2 . Шаблоны проектирования
    16. 17. 3. Именование public class XItem { public void Delete (); … } public class XOrder { public void Remove (); … }
    17. 18. 3. Именование public class XItem { public void Remove (); … } public class XOrder { public void Remove (); … }
    18. 19. 3. Именование public class XItem { public void Delete (); … } public class XOrder { public void Delete (); … }
    19. 20. 3. Именование <ul><li>public class XUserMB </li></ul><ul><li>{ </li></ul><ul><li>int m_i; </li></ul><ul><li>public int NofUrMail (); </li></ul><ul><li>… </li></ul><ul><li>} </li></ul>
    20. 21. 3. Именование <ul><li>public class XUserMailBox </li></ul><ul><li>{ </li></ul><ul><li>int m_NumberOfLetters ; </li></ul><ul><li>public int UnreadLetters </li></ul><ul><li>{ </li></ul><ul><li>get {…} </li></ul><ul><li>} </li></ul><ul><li>… </li></ul><ul><li>} </li></ul>
    21. 22. 4. Обратная связь public XOrderService FindInstallationOrder() { if (Resource == null) { return null; } … }
    22. 23. 4. Обратная связь public XOrderService FindInstallationOrder() { if (Resource == null) { throw new InvalidOperationException(&quot;Не указан ресурс&quot;); } … }
    23. 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)); }
    24. 25. 6. Рефакторинг <ul><li>Что творится с проектом: </li></ul><ul><li>Меняются требования </li></ul><ul><li>Меняется видение архитектуры </li></ul><ul><li>Меняется структура </li></ul><ul><li>Ухудшается код </li></ul><ul><li>Что же делать? </li></ul>
    25. 26. 7. Комментарии <ul><li>неочевидная реализация </li></ul><ul><li>алгоритмы (сложные описываются в дополнительных документах) </li></ul><ul><li>актуальность! </li></ul><ul><li>иногда проще написать коммент, чем понятный код </li></ul>
    26. 27. Вывод: высокий стиль есть гуд <ul><li>Пейте, дети, молоко – будете здоровы! </li></ul>

    ×