asp.net mvc文件夹/对象层次结构



背景

我有一个Asp.net MVC 3.5应用程序,它使用CSV文件导入产品。CSV文件可以来自一组特定的可配置源。要配置新的CSV源,用户最初会指定哪些CSV列映射到哪些产品属性。此配置将存储为导入模板,并在执行每次导入时可供选择。

我在尝试为该功能规划文件夹/对象结构时遇到了麻烦。我理解(也喜欢)Asp.netMVC在路由方面的灵活性,所以我知道我们可以在这里做任何事情。然而,我想要任何能帮助我们保持对象结构更加健全和可维护的建议。

最初,我设置了一个包含Import.aspx视图的"产品"文件夹。这似乎很适合控制器/动作模型。然而,当我考虑到上面提到的管理模板的功能时,事情会变得令人困惑。

EDIT:导入模板可以应用于不同的对象。因此,Product只是一个可以为其创建一个或多个ImportTemplates的对象。例如,另一个可能有ImportTemplate的对象可能是Customer。

问题

我应该在Product文件夹下创建一个名为ImportTemplate的子文件夹,并将CRUD视图放在那里吗?然后,我将为导入模板函数添加一个自定义路由。我关心的是文件夹的深度以及与同级操作Import的混淆。还是应该将ImportTemplate提升一个级别,然后使用路由将其放置在Product文件夹下?听起来很乱。

也许文件夹结构应该是Product/Import/Template。在这种情况下,我看到的问题是Import并不是一个真正的对象。我可以看到它是一个控制器,但它实际上是动作。如果我使用此结构,我是否应该在Import文件夹中放置Upload.aspx视图(以替换上面提到的Product/Import.aspx)?这似乎有点笨拙。

编辑:上面增加了ImportTemplate可以与产品(即客户)以外的对象关联的要求,将ImportTemplate文件夹直接放在Views文件夹下会更好吗?

对于构建这个对象/文件夹层次结构,有其他想法吗?

研究

为了研究这个问题,我回顾了有关文件夹结构和深度的问题。以下是几个有答案的问题,但实际上并没有回答我的问题。

-ASP.NET MVC一个视图或URL应该有多深级别?

-ASP.NET MVC 3文件夹结构

-分层MVC路由策略

一个例子

编辑:用户定期从第三方导入产品列表。他们正在从CSV文件导入数据,该文件将上载到网站。他们创建产品导入模板的实例/将其添加到自己的帐户中。此模板实例存储以下设置:

  • 名为";标题";CSV文件中的"产品名称"字段
  • 在";类别";CSV中的列应该被导入为"列";未知";类别

不同的用户可能基于不同的第三方CSV格式或基于他们自己的系统配置而具有不同的规则(即,他们不像上述用户那样具有未知类别设置)。

  • 名为";部件号";CSV中的应导入到"产品名称"字段和"产品编号"字段
  • 默认情况下,无法识别的类别应导入到";Generic;类别

您绝对正确,考虑到ASPMVC的灵活性,您可以在这里做任何关于文件夹结构的事情。如果你习惯了ASP.NET WebForms,请记住MVC完全不同,它不使用文件夹和文件作为资源的直接映射,路由基于控制器和操作。这可能需要你习惯于用"ASP经典"的方式。

因此,关键的考虑因素是什么对你和你的用户最有意义,每个人都清楚一切在哪里

也许文件夹结构应该是Product/Import/Template。这个在这种情况下,我看到的问题是Import并不是一个真正的对象。我可以看到它是一个控制器,但它实际上是行动如果使用此结构,是否应在Import文件夹(替换前面提到的Product/Import.aspx以上)?这似乎有点笨拙。

是的,听起来你的控制器应该有一个导入操作或上传操作,等等。每个控制器的视图文件夹中都可以有一个相应的视图,,但模板本身可能不需要是视图。您的模板只是导入产品时控制器操作将引用的资源。在这种情况下,自定义路由不会成为问题,我也不会将模板放在视图文件夹中。我会把它们放在一个中心位置,并在所有需要访问它们进行导入操作的控制器中引用它们。

你可以使用这样的东西:

MyApp project
    Controllers
        ProductController
    Models
        Product
    ImportTemplate
        Template1
        Template2
    Views
        Product
            Import.aspx
            Edit.aspx
            Index.aspx
            etc…    

Import.aspxUpload.aspx可能是用户可以选择模板并导入产品(或映射列并保存新模板)的页面。每个视图都将具有相应的控制器操作。您的控制器的导入或上载操作将直接访问模板文件;你所需要做的就是在你的控制器中包括一个ImportTemplate文件夹的引用(或者模型,服务层…任何将使用该模板的地方)

using  MyApp.ImportTemplate
//namespace matches folder structure, “MyApp/ImportTemplate”

当用户在产品导入页面上时,URL将类似于/Product/Import/,模板本身不一定会出现在URL中,除非您将其作为参数/Product/Import/templateID/Product/Import?templateID=123456传递。

同样,关键是要做对你的项目最有意义的事情,让事情井然有序,清晰明了,并在构建/部署应用程序时为你节省时间。

例如,我倾向于将事情分成两个或多个项目,以便在部署时更容易。举个例子,我可能有一个这样的文件夹结构:

App.UI project
    Content
        CSS
    Scripts
    Images
    Views
App.Core project (any code that will be compiled)
    Controllers
    Templates
    Models
        Helpers
        Interfaces
        Repositories
    ViewModels

然后我只需要部署App.UI项目,App.Core中的所有内容都将被编译并包含在App.UIbin文件夹

相关内容

  • 没有找到相关文章

最新更新