所以我们有一个ITEM
,TV
,LCD
和PROJECTOR
。
我们DAO
Service object
和TV
LCD
,PROJECTOR
和ITEM
也是extends
个对象。意味着这些表都是ITEM
API
表。
您可以通过UI和API服务访问这些项目。
现在,我需要将与showImageFlag
完全不相关的特定UI配置放在一起。假设我需要在UI中为每个项目显示或不显示项目图像的配置,我们称之为SHOW_IMAGE_FLAG
。可以从项目的UI中修改此值,这是一个复选框。
我一直在考虑一些选择:
将一列ITEM
添加到DAO
表及其@JSonIgnore
和服务对象。在服务对象上放置tv
标志,以便在API端忽略它,但我们可以在UI中正常使用它。 -------我对这种方法的关注是,将来我们可能需要对这些项目进行更多配置,或者可能需要lcd
,projector
和ITEM_CONFIG (id, item_id, configuration, value)
以外的其他项目。所以这总是会促使我们在表中添加一个新列。另一个问题是我们可能正在迁移所有形式的ui以使用REST API,因此我们将不得不对该JsonIgnored属性执行某些操作。
FK
表格ITEM
已添加到id
。ItemConfig
,并使用键/值方法保存与特定项目相关的N配置。因此,在每个Web控制器上,我将传递一个ITEM
对象,其中包含与请求的spring mvc
相关的所有配置。 --------我对这个问题的关注是,我应该如何将其映射到表单(使用{{1}}),以及当UI上的配置发生变化时我应该如何保持。
请随意发表评论并为此建议任何新选项。
答案 0 :(得分:2)
第二点更可行。 此外,您可以拥有另一个服务层,负责保存映射部分和服务层下面的UI控制器层,它实际上将更改映射到其正在进行的表示,即UI层。
答案 1 :(得分:1)
我会考虑将Item(id)--ItemUI(item_id)
添加为1:1。
然后,您可以将有关项目的所有UI特定添加到ItemUI属性。
此外,您可以通过第二次调用另一项服务来请求UI配置。
答案 2 :(得分:1)
从这两个选项中,我将排名第一。出现的唯一问题是迁移UI以使用API。在这种情况下,您不会使用@JsonIgnore
,而是使用Json Views。
您可以创建表示数据特定视图的类,并使用它们使用@JsonView(MyView.class)
标记您的属性。最后,您可以使用objectMapper.writeValueUsingView(out, beanInstance, MyView.class);
在您的情况下,您可以创建一个视图类MyAPIView
并注释除SHOW_IMAGE_FLAG
@JsonView(MyAPIView.class)
之外的所有字段(注意MyAPIView
是一个用于标记目的的空类,没有逻辑也没有属性。)
如果您致电objectMapper.writeValueUsingView(out, beanInstance, MyAPIView.class);
,则不会序列化SHOW_IMAGE_FLAG
属性。如果您致电objectMapper.writeValue(out, beanInstance)
,您将序列化该属性。
您必须在运行时确定要使用的视图。如果您使用的是OAuth,则可以根据所连接的客户端选择视图。
最终,您可以创建多个视图并应用继承。看看jacksons doc。
答案 3 :(得分:0)
我最终得到了一个名为ITEM_CONFIG
的项目的配置表(ITEM_ID
,UI_PROPERTIES
)
在UI_Properties
我保存JSON
字符串,该字符串映射到DAO
模型上的字符串属性,但作为服务模型上的HashMap<String, Object>
。< / p>
我有一个转换器,将dao模型中的值映射到服务对象上的hasmap
,“自动”。
在控制器上(在BaseController中,每个WebController的父[不休息]),我添加了一个从ItemConfigService获取配置的方法,然后使用{{1在响应中设置模型(SpringMVC中的模型) } {}为hasmap key
,值为parameter
值。
这工作非常干净,自上周以来我们没有任何问题。