我正在使用jquery在asp.net mvc C#中创建一个Web应用程序,它将有不同的定价计划。
当然,您付出的功能越多,就越多。
所以我打算使用角色。因此,如果某人购买了计划1,那么他们将获得计划1的角色。然后在页面上使用if语句检查他们是否处于某些角色。如果允许他们使用该功能生成它。如果不做什么。
可能很好的是整个页面可能在所有角色之间共享,除了该页面上的一个功能。
现在有人告诉我,我不应该这样做,因为如果我添加更多功能,那么我的页面会因if语句而变得更加混乱,而且很难维护。
他们说我应该将每个计划视为一个单独的申请。因此,如果我有2个计划有2个不同的链接转到不同的文件。
我同意这个人,从长远来看它可能会更好,因为我不必继续讨论if语句,但是在这种情况下我会说的话。
在我的网站的未来版本中,我将收到短信和电子邮件提醒。
现在我有一个Html表,其中包含用户必须执行的一系列任务。在该网站的未来版本中,我将提供通过电子邮件或短信提醒的选项。如果他们选择说要通过表格列中的电子邮件提醒,则会出现信封。
现在这可能仅适用于计划2而不是计划1的人。因此,该人员的解决方案只是将表格代码的所有代码复制并粘贴到名为Plan2.aspx的文件中。然后将图标的新行添加到计划2的新粘贴代码中。
现在我有一个Plan1文件,除了Plan2文件中的这一额外行外,其他所有内容都相同。
所以我对这个想法并不是太疯狂,因为如果表格有问题我会把它改成2个不是一个的位置。如果我现在添加第3个计划,我需要跟踪3组相同的代码,但有一些不同的差异。
我原来的方式是表中只有plan2的行会被if语句包围,检查他们的角色。
在某些情况下,我可能会将所有常用代码放入一个部分控件中,并将所有不同的代码放在另一个部分控件中,但这样的情况我不确定。
这只是一个例子,会有更多这些情况。
那么,使代码可维护的最佳方法是什么,但也只需要少量的重复代码。
很抱歉这篇文章很难描述我想要实现的目标以及可能出现问题的情况。
<小时/> 编辑
所以我仍然对人们给出的例子感到困惑,并希望看到它们的完整例子而不仅仅是存根。
我也在思考,但我不确定这是不是很好的做法,或者看起来很奇怪和某些部分。
即使它只是一条线,也可以在局部视图中拥有所有共同点。然后有两个单独的链接,并根据他们的角色将部分视图放在一起。
我正在考虑2个单独的链接,因为jquery的东西。比如,如果我有这个
<textbox code>
<textbox code> // this textbox code is only for plan 2 ppl. This textbox needs to go here
<textbox code>
这些文本框标签中的每一个都在其自己的局部视图中(在这种情况下为3)
所以我会有2个aspx页面。
第一
<render partialView 1>
<render partialView 2>
<render partialView 3>
第二
<render partialView 1>
<render partialView 3>
然后在这两个aspx页面中的每一个都会链接不同的javascript文件。
我想到的是,如果我只有一个javascript文件与我的jquery有人可以去添加缺少的html,并可以访问所有这些功能。
所以如果我使用“if语句”方式,我不确定如何编写它。
但与此同时,partialView中的所有内容都会显得非常有趣。就像我正在制作餐桌或其他东西一样。
一个局部视图将包含开始标记,一些行然后X部分视图将具有结束标记。
看起来非常奇怪且很难看到整个画面,因为你必须打开X量的文件才能看到整个画面。
所以必须有更好的方法。
答案 0 :(得分:2)
组件的抽象程度如何?
我天真的方法是创建一个单独的层,将组件分析到UI。类似于存储库模式的东西,使用如下方法:
public IEnumerable<PlanRestrictedFeature> GetFeaturesForPlan(Role r)
{
//return all features that the user has access to based on role
//this forces all this logic to exist in one place for maintainability
}
当然,该方法也可以包含字符串,枚举或计划对象(如果有)。在内部,这可能会使用某种类型的地图来简化事情。
然后,View可以简单地调用每个组件的Render方法。确保存储库以正确的顺序将它们传回给渲染,并依靠CSS进行放置。
答案 1 :(得分:0)
查看http://www.asp.net/mvc上的教程和示例项目。
这些都遵循一些可以帮助你的原则。
答案 2 :(得分:0)
尽管使用if语句(参见Rob Conery关于此事的blog post)并不是最好的做法,但在我看来,一些基本的逻辑是可以接受的。如果你这样做,你应该尝试使用partials来保持视图尽可能整洁。正如您所指出的那样,您认为这是最佳解决方案。
您的视图逻辑应该尽可能简单,并且您的模型将从继承您的价格计划信息中受益,以节省重复代码本身。
删除了其他代码,因为您指出只使用User类。
关于文本框,这可能比较棘手。一种想法是,您可以拥有包含全局JS的脚本文件夹,然后是具有专门用于其他角色的JS的子文件夹(例如,角色2和3)。这些可以通过自定义路由约束来保护,该约束阻止用户在没有相关级别的身份验证的情况下访问文件/文件夹。您还应该使用web.config来提供类似级别的保护。那,或者只是使用web.config文件。