2010-11-11 36 views
2

我设计了一个自定义类(或组件?),它扩展了构造函数有15个参数的Sprite。只需要第一个参数,而剩余的14个参数分配了默认值。都是必要的。ActionScript - 构造函数中的Setter参数?

除第一个必需参数外,每个参数实际上都是属性设置器。该类还包含公共setter和getter函数,允许在构建之后在运行时更改属性。

我已经在我的桌面上写过这个类(27“屏幕),并意识到当我在我的13”笔记本电脑上使用该类时可能会遇到问题 - 代码提示延伸过屏幕边缘太长了。

当setter函数可用时,是否正常/最佳实践是将可选setter作为参数包含在构造函数中,还是setter应始终独立于构造函数?

+1

你*通常*或平均需要多少这些参数?当它不是你在对象构建时需要的信息时,你应该对你真正需要的属性分别进行调用。 – poke 2010-11-11 08:31:14

+0

好吧,我只需要第一个。其余参数基本上是对象的风格。当我第一次开始上课的时候,尽管允许班级的用户使用所有不同的风格设置来构建一个好主意,但是现在我认为这已经不再理想,因为签名太长了。 – TheDarkIn1978 2010-11-11 09:47:39

+0

这是一个很好的问题,我发现有多层次的继承有一种方法来增加提供给构造函数的参数。我讨厌它,但对我来说没有明显的解决方案。我希望有人可能列出了一个设计模式来帮助。 – Allan 2010-11-11 12:56:41

回答

2

在我看来,它归结为类实例化部分代码的易用性。 如果你有14个参数,你可以全部设置或全部跳过,那么这可能是最好的解决方案。

var defaultRectangle:Rectangle = new Rectangle(); //square of 1 x 1)  
var customRectangle:Rectangle = new Rectangle(0,0, 2,0 2,2, 0,2); 

但是,如果一些14个参数是可选的,它成为一个有点难以阅读,那么我认为无论使用单独的吸气剂/ setter方法是更可读的,或者一个paramater对象(模仿命名参数)

//which parameter means what? 
var girlfriend:Girl = new Girl("Blue", 0, 0, "", "", 1.8, 0, "", 140); 

//named parameters 
var girlfriend:Girl = new Girl({eyeColor: "Blue", height:1.8, iq:140}); 

//setters 
var girlfriend:Girl = new Girl(); 
girlfriend.eyeColor = "Blue"; 
girlfriend.height = 1.8; 
girlfriend.iq = 140; 

我个人尽量使用模型时,使用“视图” 所以,如果你的对象是一个精灵,因此一个视图。也许最好的办法可能是:

var friend:Person = new Person({name: "Ford Prefect"}); 
var profileView:ProfileView = new ProfileView(friend); 
addChild(profileView); 
+0

这是一个聪明的想法,为构造函数提供可选参数的可选对象。谢谢! – TheDarkIn1978 2010-11-11 10:07:45

+1

被警告,拼错名字真的很容易。它仍然会编译没有错误,只是没有你期望的功能。在设置值之前,您必须进行NULL检查,这是额外的工作。这是什么参数。 “哪个参数意味着什么?”查看方法签名,大多数编辑会在您输入时向您显示此内容。通过接受匿名对象,用户不会知道该方法期望的参数,编辑器不会向您显示该参数。这听起来像你试图通过欺骗你的代码来修复你的编辑器的问题。向您的编辑人员提交一份错误报告。 – Joony 2010-11-11 10:47:55

+1

另外,如果你是SWC这个类,那么方法签名将是所有人都必须使用的,它不会告诉他们任何有关该方法的期望。非常多的渲染参数无用。除非你记录它,但是那么谁又想查找文档来找出一些基本的参数列表,这些参数都是可接受的参数列表?特别是因为我们已经有了一种指定语言内置的方法。 @Les在未标记参数的情况下对Adobe提出申诉。 – Joony 2010-11-11 11:01:36