设计问题 - 带有版本和接口的处理模板公开版本和类型

问题描述 投票:0回答:1

这在设计上听起来有误吗?我试图看到最灵活的方式来处理可能随时间变化的模板。例如,应用程序模板的第一个版本可以有10个字段。下一版本的模板可以有15个字段。问题不是添加字段,而是删除/更改字段名称的含义。模板将存储为JSON表示。因此,在具有不同变化的数据库中存储不是问题。问题是如何最好地在OO设计原则中表示这一点。另外,在具有JSP视图的经典Spring MVC中,随着时间的推移处理存储模板的不同变体的最佳方法是什么?

我在想如果我用记录(JSON)存储版本和数据库。

要在我的基本接口(Marker like interface)中执行此操作,我有2个方法String getVersion()和getType()在考虑设计原则时会出错吗?如果我这样做,我可以根据从数据库中检索这些对象的任何子类的类型进行查询。想象一下,对象在数据库中存储为平面结构(JSON)。例如 - > findXTypes()作为方法。在方法实现中,我可以通过查询中的Type ='。tostring()'找到。

查看它时会变得复杂。我可以通过@RequestMapping(value =“/ myTemplate”,method = RequestMethod.GET)在控制器中执行此操作.public String showRecord(@RequestParam ...){.... return“myTemplate”+键入+ TemplateVersion; }

然后我将不得不为每个版本引入一个新的JSP(View)。我知道不是很好,但除此之外我必须在同一视图中处理IF语句中的版本,这将更加困难。

有什么好主意吗?

java oop design-patterns interface object-oriented-analysis
1个回答
0
投票

要弄清楚你在问什么,有点难。但我认为你需要明确地将要求与设计分开。

我假设您的“模板”实际上是您需要向用户呈现的表单或报表页面。或者这些模板与表单/报告之间存在1对1的关系。

要求:您需要随着时间的推移支持表单/页面的不同版本,并且页面中的字段将随时间而变化。但关键问题是您是否需要在任何给定时间支持表单的多个版本?

  • 如果是,那么显然您需要多个JSP(或模板,或其他),其中一个代表您当前支持的每个版本。
  • 如果不是,那么您可能甚至不应该在代码中为模板的不同版本建模。相反,您的代码库应该只处理当前版本,您应该使用源代码版本控制来表示存储旧版本。

架构:如果您需要同时支持多个版本的模板,有两种基本方法:

  • 拥有一个处理模板所有版本的servlet类,以及一个显示所有版本的视图。这可能应该是“数据驱动的”。您将存储要为每个模板处理的字段的描述符,并编写servlet类以执行请求并仅根据描述符中的内容显示结果。 (描述符可以存储在数据库中。) 这种方法的问题在于它很复杂。如果您需要实现用于表示描述符,处理信息和为自己呈现结果的基础结构,则会更复杂。
  • 为每个模板编写单独的servlet和/或JSP类,并根据(例如)URL路径或参数在它们之间进行分派。 优点是这种方法更简单/更容易实现和理解。缺点是可能存在大量代码重复,其中大部分可能无法通过OO设计解决;即将公共代码分解为超类。 (JSP不支持子类化...)
© www.soinside.com 2019 - 2024. All rights reserved.