- PVSM.RU - https://www.pvsm.ru -
Это второй пост из серии о Poka-yoke проектировании – также известном, как инкапсуляция.
Множество классов имеют тенденцию к потреблению или раскрытию примитивных значений, таких как int, или string. В то время как такие примитивы существуют на любой платформе, их использование может приводить к процедурному коду. Более того, они обычно нарушают инкапсуляцию, допуская присвоение некорректных значений.
Это проблема обсуждалась уже много раз. Годами ранее, Джимми Богард [1] предоставил отличную трактовку проблемы, впрочем как и руководство по её решению [2]. В связи с разработкой AutoFixture [3], я также был затронут этой проблемой некоторое время назад [4]. Фактически, этот пост является «заполнителем».
Следует заметить, что и мой пост и пост Jimmy показывают то, что строки и целочисленные типы недостаточно инкапсулируют такие концепции, как почтовый индекс или телефонный номер.
Инкапсуляция остаётся нарушенной до тех пор, пока концепция, представленная примитивным значением, может принимать любые из возможных значений примитивного типа. Однако, такое является редкостью.
«Запах» проектирования
Класс потребляет примитивный тип. Однако, дальнейший анализ показывает, что не все возможные значения типа являются допустимыми.
Исправленный дизайн
Инкапсулируем примитивное значение в объект-значение, который содержит соответствующие защитные выражения и т.д., для того, чтобы гарантировать, что возможно создать только корректные экземпляры.
Примитивы имеют склонность быть ненадёжными, однако объекты-значения такой склонности не имеют.
Автор: EngineerSpock
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/50138
Ссылки в тексте:
[1] Джимми Богард: http://lostechies.com/jimmybogard/
[2] отличную трактовку проблемы, впрочем как и руководство по её решению: http://grabbagoft.blogspot.ru/2007/12/dealing-with-primitive-obsession.html
[3] AutoFixture: http://autofixture.codeplex.com/
[4] был затронут этой проблемой некоторое время назад: http://blog.ploeh.dk/2009/05/01/DealingWithConstrainedInput/
[5] Источник: http://habrahabr.ru/post/205090/
Нажмите здесь для печати.