在我的工作中,我必须实现贷款申请的Web表单,有时最多有一百个不同的输入字段,然后将应用程序保存到数据库中以便以后检索。
我替换的人创建了一个包含100列的sql表,其中每行代表一个贷款申请,每个字段都有一列。
问题在于我发现自己必须多次输入100个字段,从表单中获取数据,保存到数据库,从数据库中检索,写入输出webform。
然后每当应用程序发生变化时,我都必须在很多地方进行更改。
因此,它不仅麻烦而且容易出错。
是否有一个好的设计模式可以解决这个问题?
答案 0 :(得分:3)
看看你是否能想出更好的桌面设计。 100 Cols太过IMO。如果没有,您可以使用动态数据。同时寻找更好的UI模式或将其分解为超过1页,查看填写的100个字段可能会对用户产生影响。
答案 1 :(得分:2)
代码生成是最好的选择。 MyGeneration和CodeSmith是两个非常好的工具。
我有非常相似的项目,我使用了两种生成工具,而更喜欢CodeSmith。
答案 2 :(得分:1)
也许ASP.NET Dynamic Data会对你有用。它被描述为“一个框架,使您能够快速构建功能数据驱动的应用程序”
答案 3 :(得分:1)
之前我曾使用过这些贷款申请,我会直接告诉你,你的数据模型已被破坏。当借款人进入refi时,你会在BigTable中换一个新行吗?如果交易失败但他们想再试一次不同的房子怎么办?如果您只是编辑该应用程序行中的数据,那么您将失去关闭交易百分比的重要指标。
首先,修复您的数据模型。然后,如果可能的话,拥抱LINQ。
关于用户界面,我要么将其作为向导(这与填写这些应用程序的方式非常接近),要么将其构建为用户滚动并添加内容的一个大表单(使用AJAX)在每个部分中,以便用户可以随时保存)。
您还需要考虑这种东西的现成解决方案。不要在这里重新发明轮子;这些贷款应用程序不会经常变化,无法向他们提供全职开发人员。
编辑:对不起我假设这是住房抵押贷款。我不知道这是否属实,但我仍然认为你的数据模型已被破坏。如果你有能力改变它,你应该。
答案 4 :(得分:1)
表单中的100个字段太多了。尽量争取每页最多20个。
如果可以的话,尝试将此表单的每个部分分隔成一个单独的页面,甚至更好,将其分成某种向导。
e.g。 (示例步骤)
第1步:客户资料(姓名,年龄,SSN等)
第2步:贷款数据(固定,可变,金额,条款,特殊交易......)
第3步:信用检查?,预批准?
第4步:变化/计算......
如果您在结构化组中组织数据,您应该能够使每个部分独立工作(例如,您可以输入基本贷款数据,并获得一些初步数字,而无需输入客户数据)。
更重要的是,如果用户在导致后端不存储的100个字段之一中输入值(例如,值超出范围)会发生什么?用户是否会丢失他们输入的所有数据? - 为了便于使用,请确保当用户尝试保存/移动到下一步时nothing
丢失。
答案 5 :(得分:0)
您可以做的一件事是以编程方式获取列名称并将其以您需要的格式放在文件中。这将是解决你的直接痛苦。下面是一段c#代码,它将从oledbreader对象中获取列名。
internal List<string> GetFieldList(string sTableName)
{
tableName = sTableName;
BuildQuery("*");
command = SetupConnection();
List<string> FieldList = new List<string>();
OleDbDataReader reader = command.ExecuteReader();
for (int i = 0; i < reader.FieldCount; i++)
FieldList.Add(reader.GetName(i).ToString());
return FieldList;
}
要解决长期的情况,您可能希望使用字段作为参数来存储过程或函数。你仍然需要将值放在每个参数中,但是每个
的管理都很容易希望它有所帮助!!!他的问题在于我发现自己必须多次输入100个字段,从表单中获取数据,保存到数据库,从数据库中检索,写入输出webform。
答案 6 :(得分:0)
哎哟。
您可以使用LINQ吗?我们在这里讨论的是什么版本的.NET?
顺便说一句,如果它不是很明显,从GUI的角度来看,我建议你隐藏最终用户的大部分字段,并在用户进展时分段显示它们,这样做的好处是你可以避免显示什么不是你需要随时随地进行验证。有了某种进度指标,所以他们知道网站已经结束了(哈哈)。
答案 7 :(得分:0)
之前我遇到过这样的问题,并且知道有这么多专栏可能有正当理由。这种情况很少见,但可能会发生。
您可能想要做的是在其自己的文件中创建一个包含所有数据字段代码的分部类。这可能是字段,属性和可能的方法参数,和/或只是您的CRUD功能。并生成该部分课程,这将有助于缓解您未来的维护。
祝你好运。
答案 8 :(得分:0)
设计模式?但当然:The Adaptive Object-Model。