以面向对象的方式为概览对象建模

时间:2016-01-13 13:48:10

标签: oop design-patterns api-design

我有一个api,可以说是城市:

/cities
/city/{id}

城市端点返回城市概览(id,城市名称,城市区域),而城市端点返回相同的内容以及更多(人口,图像,缩略图...)。现在,在客户端进行建模时,我看到了不同的选择:

  1. 有一个CityOverview类,它有一个City子类,可以添加额外的属性。
  2. 让City类具有CityOverview子类的所有属性,该子类隐藏所有额外属性(例如,在Java中,通过在所有getter上为其没有的属性抛出UnsupportedOperationException)。
  3. 让上述类没有继承关系。
  4. 拥有一个允许所有额外属性为空的City类。
  5. 上述认可和/或您能想到的任何其他优点和缺点是什么?

2 个答案:

答案 0 :(得分:0)

我会选择3 - 有两个类,即。不是继承关系。以下是做出此决定的原因 -

  • 您需要使用像jackson这样的API来反序列化\ serialize JSON。为此,您需要一个字段映射的POJO。由于您现在有2个单独的类,您可以将不同的POJO映射到2个不同的api调用。它使代码更清晰。
  • 继承不是一个选项,因为有两个原因 - 1)。任何一次API调用都会为父或子带来数据。即根据您进行的API调用,其中任何一个的字段将始终为空。这是一种不必要的浪费。
  • 2)。从OOP设计的角度来看,城市呼叫中返回的数据对象是城市{id}呼叫中返回的数据的父节点。所以,我们不应该在课堂设计中也有这个。他们一起组成了城市"实体。

答案 1 :(得分:0)

我认为如果OverviewCity与City之间没有太大差异你应该只在BE中保留一个City类。

在您的/ cities api中,您可以传递完整的城市列表 可以通过客户端从City对象轻松创建具有每个城市(OverviewCity)的一些详细信息的城市列表。 在后端我不认为有任何需要支持2个类。