Не делай этого; это усложнит вещи, и вам это не нужно
... это ответ, который я написал бы здесь 2 года назад. Теперь, однако, я не так уверен; фактически, в последние месяцы я начал мигрировать старый код в этот формат не потому, что мне нечего делать, а потому, что он мне действительно нужен для реализации новых функций или изменения существующих. Я понимаю автоматическое неприятие, которое другие здесь видят в этом коде, но я думаю, что это то, что заслуживает серьезной мысли.
Выгоды
Главным преимуществом является возможность изменять и расширять код. Если вы используете
class Point {
int x,y;
// other point operations
}
вместо того, чтобы просто передавать пару целых чисел - что, к сожалению, делают многие интерфейсы, - потом становится гораздо проще добавить другое измерение. Или измените тип на double
. Если вы используете List<Author> authors
или List<Person> authors
вместо List<String> authors
этого позже, становится намного проще добавлять больше информации к тому, что представляет автор. Записывая это так, я чувствую, что я констатирую очевидное, но на практике я сам много раз виноват в использовании строк таким образом, особенно в тех случаях, когда это не было очевидно в начале, тогда мне нужно больше, чем строка.
В настоящее время я пытаюсь реорганизовать какой-либо список строк, который переплетен в моем коде, потому что мне нужно больше информации там, и я чувствую боль: \
Кроме того, я согласен с автором блога в том, что он несет больше семантической информации , облегчая понимание читателю. В то время как параметрам часто присваиваются значимые имена, и они получают специальную строку документации, это часто не относится к полям или локальным объектам.
Последним преимуществом является безопасность типов по понятным причинам, но на мой взгляд, это мелочь здесь.
Недостатки
Это займет больше времени, чтобы написать . Написать небольшой класс быстро и легко, но не легко, особенно если вам нужно много этих классов. Если вы каждые три минуты останавливаетесь, чтобы написать какой-нибудь новый класс-обёртку, это также может сильно помешать вашей концентрации. Однако я хотел бы подумать, что такое состояние усилий обычно возникает только на первом этапе написания любого фрагмента кода; Обычно я быстро получаю хорошее представление о том, какие сущности должны быть задействованы.
Он может включать в себя множество избыточных сеттеров (или конструкций) и геттеров . Автор блога приводит действительно уродливый пример new Point(x(10), y(10))
вместо new Point(10, 10)
, и я хотел бы добавить, что использование может также включать такие вещи, как Math.max(p.x.get(), p.y.get())
вместо Math.max(p.x, p.y)
. И длинный код часто считают трудным для чтения, и это справедливо. Но, честно говоря, я чувствую, что много кода перемещает объекты, и только избранные методы создают его, и еще меньше нуждаются в доступе к его мельчайшим деталям (что в любом случае не является OOPy).
дискуссионный
Я бы сказал , помогает ли это или нет с читаемостью кода спорна. Да, больше семантической информации, но больше кода. Да, легче понять роль каждого местного специалиста, но труднее понять, что вы можете с ним сделать, если не пойдете и не прочитаете его документацию.
Как и в большинстве других школ программирования, я думаю, что это вредно для здоровья. Я не вижу, чтобы я когда-либо разделял координаты x и y, чтобы они были разных типов. Я не думаю, что Count
это необходимо, когда int
должно быть достаточно. Мне не нравится unsigned int
использование в C - хотя теоретически это хорошо, оно просто не дает вам достаточно информации, и оно запрещает расширять ваш код позже для поддержки этого магического -1. Иногда вам нужна простота.
Я думаю, что сообщение в блоге немного экстремально. Но в целом я узнал из мучительного опыта, что основная идея, лежащая в его основе, состоит из правильных вещей.
У меня глубокое отвращение к чрезмерно спроектированному коду. Я действительно делаю. Но использовал правильно, я не думаю, что это чрезмерное проектирование.