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



我有一个api,可以显示城市:

/cities
/city/{id}

cities端点返回城市的概述(id,城市名称,城市区域),而city端点返回相同的加上更多的(人口,图像,缩略图…)。现在,当在客户端中对此进行建模时,我看到了不同的替代方案:

  1. 有一个CityOverview类,它有一个添加额外属性的City子类
  2. 拥有一个拥有所有属性的City类和一个隐藏所有额外属性的CityOverview子类(例如,在Java中,通过对所有没有属性的getter抛出UnsupportedOperationException)
  3. 具有以上没有继承关系的类
  4. 有一个允许所有额外属性为null的City类

以上方法和/或你能想到的任何其他方法的优缺点是什么?

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

  • 您需要使用诸如jackson之类的api来反序列化\序列化JSON。为此,您将需要一个字段映射的POJO。由于现在有两个独立的类,您可以将不同的POJO映射到两个不同的api调用。它使代码更干净
  • 继承不是一个选项,因为2个原因-1)。一次,任何API调用都将为父级或子级带来数据。也就是说,根据您进行的API调用,任何一个的字段都将始终为空。这是不必要的浪费
  • 2) 。从OOP设计的角度来看,在cities调用中返回的数据对象是,而不是在city{id}调用中返回数据的父对象。所以,我们不应该在课堂设计中也有这种情况。它们共同构成了"城市"实体

我认为,如果OverviewCity和City之间没有太大区别,那么您应该在BE中只保留一个City类。

在你的/城市api中,你可以通过你的城市的完整列表
显示城市列表以及每个城市的一些详细信息(OverviewCity)可以由客户端从city对象轻松创建。在后台,我认为没有任何必要支持2个类。

最新更新