Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 什么反/反模式涉及重复传递相同的参数?_Oop_Design Patterns_Language Agnostic_Parameters_Refactoring - Fatal编程技术网

Oop 什么反/反模式涉及重复传递相同的参数?

Oop 什么反/反模式涉及重复传递相同的参数?,oop,design-patterns,language-agnostic,parameters,refactoring,Oop,Design Patterns,Language Agnostic,Parameters,Refactoring,假设我有一些代码 House = function () { /* constructor */ } House.childPlay (childId) { ... } House.childLearn (childId) { ... } House.childEat (childId) { ... } 因此,隐式地说,这个房屋对象“有”子对象,但它不一定有子对象。这就是我想知道的。不断传来传去的孩子们似乎有点可疑。House是否应该拥有一组子对象 House.Child.play

假设我有一些代码

House = function () { /* constructor */ }

House.childPlay  (childId) { ... }
House.childLearn (childId) { ... }
House.childEat   (childId) { ... }
因此,隐式地说,这个房屋对象“有”子对象,但它不一定有子对象。这就是我想知道的。不断传来传去的孩子们似乎有点可疑。House是否应该拥有一组子对象

House.Child.play  () { ... }
House.Child.learn () { ... }
House.Child.eat   () { ... }
我唯一担心的是,有些手术是在房子和孩子之间进行的,就像它们相互作用一样。因此,子对象需要对父对象进行某种感知

House.Child.clean () {
    self._cleaningStrategy( self.house._provideMop() );
}

我看到有一种叫做参数对象的设计模式。是这个吗?我想如果我传递的是一个元组值的参数,那会是这样,但这里我只传递了一个。

听起来孩子的行为与房子无关(应该是这样的)。如果我们想让孩子吃东西,那与房子无关,所以我们应该这样做:

Child.Eat();
如果我们想让孩子打扫房子,听起来我们应该这样做:

Child.CleanHouse(house);
这样,孩子也可以打扫另一所房子;不仅仅是那栋房子

CleanHouse()可以如下所示:

Mop mop = house.GetMop();
// Perform cleaning activities here.
我同意你对孩子在房屋物体上的行为的关注。这违反了面向对象的单一责任原则(house应该只做house的事情)和信息专家(拥有履行责任所需信息的类)的设计思想。房子应该包含特定于房子的行为,孩子应该包含特定于孩子的行为,否则他们的结合太紧密了


我不知道这是一个设计模式问题,而是一个面向对象的问题。

那么,您关心的是什么?传递此id如何影响您的代码?一个同样有效的问题可能是“为什么房子不属于儿童?”…但您还没有告诉我们为什么不属于儿童。我猜这是因为孩子们没有钱。是的,不断地传递相同的参数太冗长/笨拙了,还有更好的方法。@SanJacinto没有任何东西阻止孩子拥有房子。我只是还没有实现它,这正是我要问的。并没有限制,这个问题不可能回答。虚构的与代码无关的例子很难讨论。真实的例子更有可能吸引真实的答案。我想这比House.EatChild()更好:o) 在一些恐怖电影中,我敢肯定房子吃孩子。并非闻所未闻!