Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 在模型中用数百个问题表示表单的最佳方式是什么_Oop - Fatal编程技术网

Oop 在模型中用数百个问题表示表单的最佳方式是什么

Oop 在模型中用数百个问题表示表单的最佳方式是什么,oop,Oop,我正在尝试设计一个所得税申报软件 在模型中表示/存储包含数百个问题的表单的最佳方式是什么 就本例而言,我需要至少6个模型T4、T4AOAS、T4AP、T1032、UCCB、T4E,它们可能包含数百个字段 它是通过创建数百个字段来实现的吗?在地图中存储值?数组?在这种情况下,除非可以推断公共字段,否则整体聚合可能是不可避免的。我将排除RDBMS,因为本主题似乎更多地关注较低级别的数据结构和更专有的解决方案,尽管这可能是一个非常有效的选项,可以管理所有这些字段 在这种情况下,我认为它不再仅仅是日常实

我正在尝试设计一个所得税申报软件

在模型中表示/存储包含数百个问题的表单的最佳方式是什么

就本例而言,我需要至少6个模型T4、T4AOAS、T4AP、T1032、UCCB、T4E,它们可能包含数百个字段


它是通过创建数百个字段来实现的吗?在地图中存储值?数组?

在这种情况下,除非可以推断公共字段,否则整体聚合可能是不可避免的。我将排除RDBMS,因为本主题似乎更多地关注较低级别的数据结构和更专有的解决方案,尽管这可能是一个非常有效的选项,可以管理所有这些字段

在这种情况下,我认为它不再仅仅是日常实践,而更多地是形式

从这个角度来看,在这种情况下最糟糕的可能是一个聚集字段的正式对象,比如一个包含大量数据成员的类或结构。这些往往是最尴尬和最没有吸引力的独石,因为他们往往有一个静态的性质。根据语言的不同,声明/定义/初始化可能是分开的,这意味着每个字段需要维护2-3行代码。如果要从文件中读取/写入这些字段,则必须为每个字段编写单独的代码行,并在添加新字段或删除现有字段时维护和更新所有代码。在这种情况下,如果您开始处理任何类似多态性需求的事情,那么您可能必须为每个字段编写一大堆分支代码,而且这也必须得到维护

因此,我认为静态聚合中的数百个字段是迄今为止最不可维护的

在这里,数组和映射对我来说实际上是同一件事,与语言无关,前提是您需要这些键/值对,只是在存储键的位置和涉及的算法复杂性方面存在潜在的差异。不管你做什么,在这个巨石中的关键搜索应该是对数时间或更好大多数语言中的“映射/关联数组”通常具有这种特性

这些可能更合适,并且您可以实现您喜欢的运行时灵活性,而不必从文件中管理这些内容,并在没有预先存在的知识的情况下动态添加字段。他们在这里会更宽容

因此,如果在类中的一组字段和类似于地图的内容之间进行选择,我建议选择地图。对于这类情况,它的动态特性将更加宽容,并且通常远远超过编译时的好处,例如,检查以确保字段实际存在,否则将产生语法错误。如果我们只接受这种检查将在运行时发生,那么这种检查很容易添加回去,甚至更多

一个可能使场解决方案更具吸引力的例外是,如果您使用反射和更动态的技术来动态生成具有适当场的对象。然后在运行时获得这些动态好处和灵活性。但是,初始化结构可能会更加笨拙,可能需要更多地依赖于繁重且可能在计算上非常昂贵的内省、类型操作和代码生成机制,并且最终会得到更难维护的时髦代码

因此,我认为最安全的方法是地图或关联数组,以及一种可以让您轻松添加新字段、检查现有字段等的语言,它的周转速度非常快。如果语言本身不具备这种质量,您可以通过外部文件动态添加字段,只需维护文件。

一种非常通用的方法可以是XML

XML允许您

将数据嵌套到任何程度 组合值和元信息属性和元素 使用XSD详细描述您的数据 外部储存 容易维护 甚至将其与其他信息结合起来查看处理指令 最后,但并非最不重要的是,以几乎与模型相同的格式存储真实数据。。。 最后一点,但甚至不是最简单的一点:-有XSLT可以将XML数据转换为任何其他格式,如HTML,以获得良好的表示 所有主要语言和数据库系统都高度支持XML

另一种方式可以是典型的零件清单或BOM表

此树结构通常实现为具有自引用parentID的表。使用这样的表需要大量的递归

强烈建议安全存储数据类型。要么使用字符存储格式和类型标识符,这意味着您必须在这里和那里强制转换所有值,要么通过引用使用不同的类型安全副表

此外,如果要从列表中填充数据,则应该定义一个数据源来加载select 动态地创建离子列表

结论

什么最适合您主要取决于您的需求:modell多久更改一次?有多少规则可以保证数据的完整性?您正在使用RDBMS吗?您正在使用哪种语言/工具