При разработке функции вы передаете экспликационные значения или объект с этими значениями? - PullRequest
0 голосов
/ 28 июля 2011

Это всего лишь простой вопрос о дизайне ... кто может ответить на вопрос о мнении или предпочтении, или «это зависит», но я все равно его задам.

Если мне нужно создать функцию, которая принимаетнекоторые значения, но у меня есть объект содержит эти значения вы передаете полный объект или только значения.

, такие как:

private void myFunction (int obj.a, double obj.b, bool obj.c , Object subObj)

или

private void myFunction (Object obj)

IЯ смотрю на некоторый код, который я написал, и я не был согласен с тем, как я это сделал.И теперь я хочу очистить код, но эти различия заставляют его работать больше.

Существуют ли какие-то отраслевые «практические правила», к которым это относится (ПОЦЕЛУЙ, СУХОЙ, ТВЕРДЫЙ)?

Возможно, вы придерживаетесь каких-то правил или указаний?

Есть ли какой-то другой метод, который я просматриваю?

Спасибо.

ps Я полагаю, что объект может быть IObject, который может быть лучше (??), но я не думаю, чтоэто меняет общий вопрос.

Ответы [ 5 ]

4 голосов
/ 28 июля 2011

Хотя ответ может очень сильно варьироваться от программиста к программисту, люди придумали эмпирические правила типа «как только вы получите четыре аргумента, объедините их все в объект».

Обратите внимание, чтогораздо проще передать набор аргументов в одном объекте в языках, которые имеют красивые объектные литералы и не требуют, чтобы вы объявляли классы или вызывали методы получения, поэтому сам язык фигурирует.

Ребекка Мерфиимеет недавнее сообщение в блоге, которое освещает именно эту проблему в некоторой глубине.Я думаю, вам может понравиться: http://blog.rebeccamurphey.com/objects-as-arguments-in-javascript-where-do-y.

1 голос
/ 28 июля 2011

Вопрос сводится к следующему: имеют ли аргументы «смысл» быть значимым объектом? Если это так, вы можете объединить их в «объект параметра». Однако, если этот объект параметров используется только в этом конкретном контексте, это не имеет смысла снова.

Пример, myMethod (int a, int b, float d); Аргументы даже не имеют собственных имен, поэтому вообще не имеет никакого смысла создавать объект Parameter для него. Теперь рассмотрим это, setOwner (String familyName, String firstName, Date birthday), очевидно, это описывает полную плоть Person, так почему бы не использовать Person-Object?

Наконец: ваши API становятся намного более выразительными, если они в основном фокусируются на объектах, которые имеют смысл в вашем домене, вместо передачи простых или простых типов.

например. в программировании пользовательского интерфейса Java я очень часто использую объекты Dimensions вместо аргументов width и height.

1 голос
/ 28 июля 2011

Нужно ли myFunction знать об объекте?Если так, передайте Объект.Или myFunction просто нужны три значения, которые могут прийти откуда угодно?Если так, то передайте три значения.Как правило, склоняйтесь к последнему выбору, поскольку он дает вам более универсальную функцию и меньше зависимостей.Если myFunction действительно должна знать об объекте, то, вероятно, это должен быть метод объекта.

0 голосов
/ 02 августа 2011

Когда вы передаете Object в функцию и используете ее члены (свойства / методы) внутри, вы создаете физическую зависимость от этого Object.Это означает, что когда бы вам ни потребовалось изменить что-либо в Object по какой-либо причине, вам также нужно будет учитывать, как это используется внутри этой функции.Иногда это желательно, а иногда нет - это зависит от контекста.Общее правило гласит, что чем меньше зависимостей, тем лучше.Передача явных параметров вместо Object также лучше подходит для Принципа инверсии зависимостей , поскольку мы не полагаемся на конкретную реализацию Object.Тем не менее, иметь много параметров для функции не очень практично, и очень часто для этой цели вводятся объекты определенного типа - контейнеры.

0 голосов
/ 28 июля 2011

Мое мнение как общего ООП (Фрэнк: у меня мало опыта):

Зависит от функциональности метода. Если вы хотите, чтобы метод манипулировал только значениями определенного типа объекта, то принятие такого объекта в качестве аргумента дает лучшее значение. Но если вы хотите, чтобы метод управлял общей функцией (не специфичной для какого-либо объекта), то передача отдельных значений дает лучшее значение.

...