0

我有一个任务,我需要一些提示和解释来解决和理解它。这是关于为客户注册的。

一个ContactForm 与Contact 有关系,而Contact 与Adress、Email 和Phone 有关系。

用户在 ContactForm 中输入信息,然后应在 Adress、Email 和 Phone 类中传递和检查此信息。但我想这些信息必须通过 Contact 类。因此,我在 ContactForm 中创建了一个 Contact 对象并将数据发送到 Contact 的构造函数,但预计我在 Contact 字段中声明的 Adress、Phone 和 Email 的构造函数中使用对象引用。这个我不明白它是如何工作的?也许使用对象引用是为了避免向Contact的构造函数发送太多数据?

我还将使用属性来设置和获取信息,同样的,我希望使用对象的引用。

如果我理解我的说明,Contact 的构造函数应该如下所示:

Contact(string firstName, string lastname, Adress adr, Phone tel, Email mail)

在这里我不明白当我需要使用这样的构造函数时应该如何传递表单中的数据?

4

2 回答 2

0

在构造函数中使用对象引用的意义在于它更具动态性。
假设我做了一个这样的构造函数:

public void main()
{
    var c = new Contact("europeroad",9999, "USA");
}

public Contact(string address, int zipcode, string country){
    this.Address = new Address(address,zipcode,country);
}

这当然可以,但是如果您添加新字段会发生什么?region, createdon , ...
您必须调整 2 个构造函数和 2 个构造函数调用。
如果您按照您对对象引用的建议进行操作,您将获得以下结果:

public void main()
{
  var a = new Address();
  a.Street = "europeroad";
  a.Zipcode = 9999;
  a.Country = "USA";
  var c = new Contact(a);
}
public Contact(Address address){
    this.Address = address;
}

在此处添加新字段只会导致更改主要方法(无需更改签名)。

于 2012-04-27T08:02:45.767 回答
-1

这取决于您的用例、您从 UC 生成的域模型和系统序列图。老实说,我可以说这是非常常见的 UC,并且有很多解决方案。基于 Craig Larmans OO 分析和设计书:

UC:用户输入联系信息。系统检查信息的有效性。(我们可以详细说明此步骤是否有任何错误,现在我想简要解释一下,所以我不会详细说明...) 系统向用户显示成功消息。

据他们介绍,系统有联系的概念,联系包含地址电子邮件和电话。域模型有四个不同的概念,分别是联系人、地址、电子邮件和电话。根据 UC 和 Grasp Design 模式,您需要实现控制器对象来分离 UI 和 Bussines Logic。

联系人/某种结果指示 ContactController(用户、地址信息、电话信息)

因为联系人可以通过来自Controller的信息来表示,所以创建Contact对象更容易理解。我认为,设计比它消耗多少数据更重要。老实说,我可以说,如果你的对象消耗了这么多数据,那么你就有设计问题:)

于 2012-04-27T08:08:40.460 回答