【发布时间】:2010-01-06 08:52:47
【问题描述】:
在我的数据库中,可能有十几个表代表查找类型(所有表都有 ID 和 Name 列 - 不,它们必须保持为单独的表,不会被规范化为一个表)。我正在构建一个管理应用程序,我希望管理员能够添加/编辑/删除/列出所有这些查找。我知道我可以重用该模型,但除了编写 3 个视图、每个查找类型的 1 个控制器(产生 48 个视图和 12 个控制器)之外,还有更有效的方法可以在 asp mvc 2 应用程序中编写它吗?
【问题讨论】:
在我的数据库中,可能有十几个表代表查找类型(所有表都有 ID 和 Name 列 - 不,它们必须保持为单独的表,不会被规范化为一个表)。我正在构建一个管理应用程序,我希望管理员能够添加/编辑/删除/列出所有这些查找。我知道我可以重用该模型,但除了编写 3 个视图、每个查找类型的 1 个控制器(产生 48 个视图和 12 个控制器)之外,还有更有效的方法可以在 asp mvc 2 应用程序中编写它吗?
【问题讨论】:
我不建议移除模型、控制器和视图之间的耦合。这种模式背后的想法是,您可以将业务逻辑与表示与工作流分开。如果您开始将多个模型混合到同一个视图/控制器中,就会变得一团糟。
也许尝试使用母版页做您正在尝试的事情,并让您的模型继承自一个通用基类或类似的东西?这样您就可以重复使用代码,而无需将其分解到相同的文件中。
【讨论】:
将所有这些组合到一个实体中的更高级的 ORM 映射怎么样?
【讨论】:
我会使用 一个控制器和每个 CRUD 操作的动作/视图 (1x4) 来做到这一点。当架构在一个或多个查找表上发生更改时,我会处理它。否则,想想如果您向每个表添加一列所需要的工作:您将不得不更新 48x12 或任何文件。
具体操作方式取决于您的模型,但可以简单地使用 ADO.NET 并返回一个 DataTable 或类似的填充有动态 SQL 语句的数据表,其中表名由视图提供。当然,如果您使用字符串连接,则需要防范 SQL 注入。
Create 视图将类似地使用来自已发布表单的表名来了解要使用已发布数据更新哪个表。
【讨论】:
研究使用 T4 模板 (decent example) 构建所有内容。您应该能够根据每个模型编写代码生成控制器和视图。
抱歉,我的答案是使用 48 个视图和 12 个控制器...设置代码生成器,这样如果您添加更多查找类型,您需要做的就是重新运行代码,然后繁荣,设置了控制器和视图。
【讨论】: