Ric*_*h C 6 architecture oop import asp.net-mvc import-from-csv
我有一个使用CSV文件导入产品的Asp.net MVC 3.5应用程序.CSV文件可以来自特定的可配置源组.要配置新的CSV源,用户最初会指定哪些CSV列映射到哪些产品属性.此配置将存储为导入模板,并在执行每次导入后可供选择.
我试图计划此功能的文件夹/对象结构时遇到了问题.我理解(并且喜欢)Asp.net MVC的灵活性,所以我知道我们可以做任何事情.但是,我想任何有助于我们保持对象结构更健全和可维护的建议.
最初我设置了一个包含Import.aspx视图的Product文件夹.这似乎足够适合控制器/动作模型.但是,当我考虑用于管理上述模板的功能时,事情会变得混乱.
编辑:导入模板可以应用于不同的对象.因此,Product只是一个可以为其创建一个或多个ImportTemplates的对象.例如,可能具有ImportTemplate的另一个对象可以是Customer.
我应该在Product文件夹下创建一个名为ImportTemplate的子文件夹并将CRUD视图放在那里吗?然后,我将为导入模板功能添加自定义路由.我关心的是文件夹深度以及与兄弟动作导入的混淆.或者ImportTemplate是否应该升级,然后使用路由将其放在Product文件夹下?听起来很乱.
也许文件夹结构应该是Product/Import/Template.我在这种情况下看到的问题是Import实际上不是一个对象.我可以看到它是一个控制器但它真的意味着行动.如果我使用这个结构,我应该在Import文件夹中放置一个Upload.aspx视图(以替换上面提到的Product/Import.aspx)?这似乎变得有点笨重.
编辑:由于上面添加的要求,ImportTemplate可以与Product(即Customer)以外的对象相关联,最好将ImportTemplate文件夹直接放在Views文件夹下吗?
构建此对象/文件夹层次结构的任何其他想法?
为了研究这个问题,我回顾了有关文件夹结构和深度的问题.这里有几个问题有答案,但实际上没有提供我的问题的答案.
编辑:用户定期从第三方导入产品列表.他们正在从CSV文件导入数据,该文件将上传到网站.他们在其帐户中创建/添加产品导入模板的实例.此模板实例存储以下设置:
不同的用户可能具有基于不同的第三方CSV格式或基于他们自己的系统配置的不同规则(即,他们没有像上面的用户那样设置未知类别).
小智 0
您\xe2\x80\x99 绝对正确,考虑到 ASP MVC 的灵活性,您可以在此处执行有关文件夹结构的任何操作。如果您习惯 ASP.NET WebForms,请记住 MVC 完全不同,因为它不使用文件夹和文件作为资源的直接映射,并且路由基于控制器和操作。当您习惯以“ASP 经典”方式执行此操作时,这可能需要习惯。
\n\n因此,关键的考虑因素是什么对您和您的用户最有意义,并且每个人都清楚一切在哪里。
\n\n\n\n\n也许文件夹结构应该是产品/导入/模板。在这种情况下,我看到的问题是导入并不是真正的对象。我可以看到它是一个控制器,但它实际上是一个操作。如果我使用此结构,是否应该在导入文件夹中放置一个 Upload.aspx 视图(以替换上面提到的 Product/Import.aspx)?这似乎有点笨拙。
\n
是的,听起来您的控制器应该有导入操作或上传操作等\xe2\x80\xa6,其中每个控制器都可以在该控制器\xe2\x80\x99s 视图文件夹中具有相应的视图,但模板本身可能没有\xe2\x80\x99t 需要是views。您的模板只是导入产品时控制器操作将引用的资源。在这种情况下,自定义路由\xe2\x80\x99不会成为问题,我不会将模板放置在视图文件夹中。I\xe2\x80\x99d 将它们放在一个中心位置,并在需要访问它们以进行导入操作的所有控制器中引用它们。
\n\n你可以使用这样的东西:
\n\nMyApp project\n Controllers\n ProductController\n Models\n Product\n ImportTemplate\n Template1\n Template2\n Views\n Product\n Import.aspx\n Edit.aspx\n Index.aspx\n etc\xe2\x80\xa6 \nRun Code Online (Sandbox Code Playgroud)\n\n、Import.aspx或Upload.aspx可能是用户可以选择模板并导入产品(或映射列并保存新模板)的页面。每个视图都会有一个相应的控制器操作。您的controller\xe2\x80\x99s导入或上传操作将直接访问模板文件;您\xe2\x80\x99ll需要做的就是在控制器中包含对ImportTemplate文件夹的引用(或模型,服务层\xe2\x80\xa6任何将使用模板的地方)
using MyApp.ImportTemplate\n//namespace matches folder structure, \xe2\x80\x9cMyApp/ImportTemplate\xe2\x80\x9d\nRun Code Online (Sandbox Code Playgroud)\n\n当用户位于产品导入页面时,URL 将类似/Product/Import/,并且模板本身不一定会出现在 URL 中,除非您将其作为参数/Product/Import/templateID或/Product/Import?templateID=123456.
同样,关键是做对您的项目最有意义的事情,让事情井井有条、清晰明了,并且在您\xe2\x80\x99 构建/部署应用程序时可以节省时间。
\n\n例如,我倾向于将事情分成两个或多个项目,以便在部署时更容易。例如,我可能有这样的文件夹结构:
\n\nApp.UI project\n Content\n CSS\n Scripts\n Images\n Views\n\nApp.Core project (any code that will be compiled)\n Controllers\n Templates\n Models\n Helpers\n Interfaces\n Repositories\n ViewModels\nRun Code Online (Sandbox Code Playgroud)\n\n然后我需要部署的就是App.UI项目,其中的所有内容都App.Core将被编译并包含在App.UI\\bin文件夹中
| 归档时间: |
|
| 查看次数: |
900 次 |
| 最近记录: |