SlideShare a Scribd company logo
1 of 27
Код как низкоуровневая документация Михаил Гуренков Андрей Свердлов
Программа – штука непростая
Как описать программу?
[object Object],[object Object],[object Object]
PERT-time
Еда 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 Удовольствие
Еда 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 Удовольствие
 
Filters Configuration UserInterface DataAccess Domain
Как описать этот модуль? Filters
Самодокументирующийся код  ,[object Object],[object Object]
1. Декомпозиция ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
2 .  Шаблоны проектирования
2 .  Шаблоны проектирования
3. Именование public class XItem { public void Delete (); … } public class XOrder { public void Remove (); … }
3. Именование public class XItem { public void  Remove  (); … } public class XOrder { public void  Remove  (); … }
3. Именование public class XItem { public void  Delete  (); … } public class XOrder { public void  Delete  (); … }
3. Именование ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
3. Именование ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
4. Обратная связь public XOrderService FindInstallationOrder() { if (Resource == null) { return null; } … }
4. Обратная связь public XOrderService FindInstallationOrder() { if (Resource == null) { throw new InvalidOperationException("Не указан ресурс"); } … }
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)); }
6. Рефакторинг ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
7. Комментарии ,[object Object],[object Object],[object Object],[object Object]
Вывод: высокий стиль есть гуд ,[object Object]

More Related Content

What's hot

Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Roman Brovko
 
веселов
веселоввеселов
веселовNLPseminar
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.Roman Brovko
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности PythonPyNSK
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
 
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...Ontico
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonPython Meetup
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Roman Brovko
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPython Meetup
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Roman Brovko
 
Лекция 4. Строки, байты, файлы и ввод/вывод.
 Лекция 4. Строки, байты, файлы и ввод/вывод. Лекция 4. Строки, байты, файлы и ввод/вывод.
Лекция 4. Строки, байты, файлы и ввод/вывод.Roman Brovko
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILRoman Brovko
 
Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Roman Brovko
 
Лекция 10. Классы 2.
Лекция 10. Классы 2.Лекция 10. Классы 2.
Лекция 10. Классы 2.Roman Brovko
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6Technopark
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2Technopark
 
Самые популярные браузеры 2015
Самые популярные браузеры 2015Самые популярные браузеры 2015
Самые популярные браузеры 2015Анатолий Мячев
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Презентация на тему: Проверочная работа по информатике
Презентация на тему: Проверочная работа по информатикеПрезентация на тему: Проверочная работа по информатике
Презентация на тему: Проверочная работа по информатике2berkas
 

What's hot (20)

Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.Лекция 9. Модули, пакеты и система импорта.
Лекция 9. Модули, пакеты и система импорта.
 
веселов
веселоввеселов
веселов
 
Лекция 11. Тестирование.
Лекция 11. Тестирование.Лекция 11. Тестирование.
Лекция 11. Тестирование.
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности Python
 
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014
 
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...
Поиск паттернов (Data Mining: Pattern Discovery) / Константин Игнатов (Qrator...
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.Лекция 2. Всё, что вы хотели знать о функциях в Python.
Лекция 2. Всё, что вы хотели знать о функциях в Python.
 
Pyton – пробуем функциональный стиль
Pyton – пробуем функциональный стильPyton – пробуем функциональный стиль
Pyton – пробуем функциональный стиль
 
Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.Лекция 7. Исключения и менеджеры контекста.
Лекция 7. Исключения и менеджеры контекста.
 
Лекция 4. Строки, байты, файлы и ввод/вывод.
 Лекция 4. Строки, байты, файлы и ввод/вывод. Лекция 4. Строки, байты, файлы и ввод/вывод.
Лекция 4. Строки, байты, файлы и ввод/вывод.
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GIL
 
Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.Лекция 5. Встроенные коллекции и модуль collections.
Лекция 5. Встроенные коллекции и модуль collections.
 
Лекция 10. Классы 2.
Лекция 10. Классы 2.Лекция 10. Классы 2.
Лекция 10. Классы 2.
 
Web осень 2013 лекция 6
Web осень 2013 лекция 6Web осень 2013 лекция 6
Web осень 2013 лекция 6
 
Web осень 2013 лекция 2
Web осень 2013 лекция 2Web осень 2013 лекция 2
Web осень 2013 лекция 2
 
Spring puzzlers
Spring puzzlersSpring puzzlers
Spring puzzlers
 
Самые популярные браузеры 2015
Самые популярные браузеры 2015Самые популярные браузеры 2015
Самые популярные браузеры 2015
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Презентация на тему: Проверочная работа по информатике
Презентация на тему: Проверочная работа по информатикеПрезентация на тему: Проверочная работа по информатике
Презентация на тему: Проверочная работа по информатике
 

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

Лекция 6
Лекция 6Лекция 6
Лекция 6itc73
 
Вещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиВещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиZheka Kozlov
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотекPyNSK
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Javaitc73
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8chashnikov
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#bolevik
 
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/LinuxDefconRussia
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#Dmitri Soshnikov
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.Igor Shkulipa
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Dima Dzuba
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоStanfy
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)Evgeny Kaziak
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаAlexander Kucherenko
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013ScalaNsk
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 

Similar to Код как низкоуровневая документация (20)

Лекция 6
Лекция 6Лекция 6
Лекция 6
 
Вещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не зналиВещи в Java, о которых вы (возможно) не знали
Вещи в Java, о которых вы (возможно) не знали
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
 
Lec 2 Java
Lec 2 JavaLec 2 Java
Lec 2 Java
 
Lec 2
Lec 2Lec 2
Lec 2
 
Bytecode
BytecodeBytecode
Bytecode
 
Lambdas in java 8
Lambdas in java 8Lambdas in java 8
Lambdas in java 8
 
принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#принципы ооп и программирование классов в C#
принципы ооп и программирование классов в C#
 
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/Linux
 
Язык программирования C#
Язык программирования C#Язык программирования C#
Язык программирования C#
 
C sharp deep dive
C sharp deep diveC sharp deep dive
C sharp deep dive
 
C# Deep Dive
C# Deep DiveC# Deep Dive
C# Deep Dive
 
C# Desktop. Занятие 02.
C# Desktop. Занятие 02.C# Desktop. Занятие 02.
C# Desktop. Занятие 02.
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.
 
Фундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел ТайкалоФундаментальные основы разработки под iOS. Павел Тайкало
Фундаментальные основы разработки под iOS. Павел Тайкало
 
[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)[JAM 1.1] Clean Code (Paul Malikov)
[JAM 1.1] Clean Code (Paul Malikov)
 
Поговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языкаПоговорим о JavaScript, основы и современные тенденции развития языка
Поговорим о JavaScript, основы и современные тенденции развития языка
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 

More from Constantin Kichinsky

Прототипирование приложений в Expression Blend + Sketchflow
Прототипирование приложений в Expression Blend + SketchflowПрототипирование приложений в Expression Blend + Sketchflow
Прототипирование приложений в Expression Blend + SketchflowConstantin Kichinsky
 
Пользовательский интерфейс
Пользовательский интерфейсПользовательский интерфейс
Пользовательский интерфейсConstantin Kichinsky
 
Архитектура корпоративных систем
Архитектура корпоративных системАрхитектура корпоративных систем
Архитектура корпоративных системConstantin Kichinsky
 
Шаблоны проектирования 2
Шаблоны проектирования 2Шаблоны проектирования 2
Шаблоны проектирования 2Constantin Kichinsky
 
Шаблоны проектирования 1
Шаблоны проектирования 1Шаблоны проектирования 1
Шаблоны проектирования 1Constantin Kichinsky
 
Создание новых объектов
Создание новых объектовСоздание новых объектов
Создание новых объектовConstantin Kichinsky
 
jQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptjQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptConstantin Kichinsky
 
Django – фреймворк, который работает
Django – фреймворк, который работаетDjango – фреймворк, который работает
Django – фреймворк, который работаетConstantin Kichinsky
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Constantin Kichinsky
 
Управление проектами
Управление проектамиУправление проектами
Управление проектамиConstantin Kichinsky
 
Ajax и будущее Java Script
Ajax и будущее Java ScriptAjax и будущее Java Script
Ajax и будущее Java ScriptConstantin Kichinsky
 

More from Constantin Kichinsky (20)

Brain to brain communications
Brain to brain communicationsBrain to brain communications
Brain to brain communications
 
Прототипирование приложений в Expression Blend + Sketchflow
Прототипирование приложений в Expression Blend + SketchflowПрототипирование приложений в Expression Blend + Sketchflow
Прототипирование приложений в Expression Blend + Sketchflow
 
JavaScript OOP
JavaScript OOPJavaScript OOP
JavaScript OOP
 
Пользовательский интерфейс
Пользовательский интерфейсПользовательский интерфейс
Пользовательский интерфейс
 
Архитектура корпоративных систем
Архитектура корпоративных системАрхитектура корпоративных систем
Архитектура корпоративных систем
 
Шаблоны проектирования 2
Шаблоны проектирования 2Шаблоны проектирования 2
Шаблоны проектирования 2
 
Шаблоны проектирования 1
Шаблоны проектирования 1Шаблоны проектирования 1
Шаблоны проектирования 1
 
Обработка ошибок
Обработка ошибокОбработка ошибок
Обработка ошибок
 
Создание новых объектов
Создание новых объектовСоздание новых объектов
Создание новых объектов
 
Декомпозиция
ДекомпозицияДекомпозиция
Декомпозиция
 
Design Lecture
Design LectureDesign Lecture
Design Lecture
 
jQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScriptjQuery: быстрая разработка веб-интерфейсов на JavaScript
jQuery: быстрая разработка веб-интерфейсов на JavaScript
 
Оптимизация SQL
Оптимизация SQLОптимизация SQL
Оптимизация SQL
 
Django – фреймворк, который работает
Django – фреймворк, который работаетDjango – фреймворк, который работает
Django – фреймворк, который работает
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!
 
Silverlight 2
Silverlight 2Silverlight 2
Silverlight 2
 
Управление проектами
Управление проектамиУправление проектами
Управление проектами
 
Silverlight 2
Silverlight 2Silverlight 2
Silverlight 2
 
Imagine Cup
Imagine CupImagine Cup
Imagine Cup
 
Ajax и будущее Java Script
Ajax и будущее Java ScriptAjax и будущее Java Script
Ajax и будущее Java Script
 

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

  • 1. Код как низкоуровневая документация Михаил Гуренков Андрей Свердлов
  • 4.
  • 6. Еда 1.2.3. Центр еды Кошки 1.2.4. Центр размнож. 1.2.1. Мяука- лка Мяу! DFD Удовольствие
  • 7. IDEF0 1. Кошка Еда Кошки Хозяин Мяу! Отходы Квартира Лоток
  • 8. UML 1 1 1 1 * * * 1 * 1..* 1 Кошка Кличка : string Возраст : unsigned int Ходить () Есть () Спать () Центр еды Есть () Центр сна Спать () Еда Количество : unsigned int Мяу! Громкость : unsigned int Удовольствие
  • 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.  
  • 12. Как описать этот модуль? Filters
  • 13.
  • 14.
  • 15. 2 . Шаблоны проектирования
  • 16. 2 . Шаблоны проектирования
  • 17. 3. Именование public class XItem { public void Delete (); … } public class XOrder { public void Remove (); … }
  • 18. 3. Именование public class XItem { public void Remove (); … } public class XOrder { public void Remove (); … }
  • 19. 3. Именование public class XItem { public void Delete (); … } public class XOrder { public void Delete (); … }
  • 20.
  • 21.
  • 22. 4. Обратная связь public XOrderService FindInstallationOrder() { if (Resource == null) { return null; } … }
  • 23. 4. Обратная связь public XOrderService FindInstallationOrder() { if (Resource == null) { throw new InvalidOperationException("Не указан ресурс"); } … }
  • 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)); }
  • 25.
  • 26.
  • 27.

Editor's Notes

  1. Когда приходится писать код? (для себя, по учебе, чаще всего по работе) Почему приходится писать хороший код?