2009-12-17 74 views
0

我的项目中的每个控制器类都来自一个基本控制器类,该控制器类正确地命名为BaseController。使BaseViewData类成为BaseController类的属性是一个坏主意?

所有视图数据都包含在名为BaseViewData的类中(它将来可能成为更具体的视图数据类的基础控制器)。

我在BaseController上创建了一个BaseViewData属性,因为每个控制器都需要访问强类型的基本视图数据中的数据(并且BaseController执行一些预填充某些BaseViewData属性的工作)。

我这样做是因为:

  1. 如果我更改的属性,我 会得到编译时错误 检查的详细 解决断码快。

  2. 执业干的,我已经 设法巩固代码 以前分散在整个 每个控制器了很多东西。

但是,这是我第一次尝试这样做。所以我可以忽略一个准备放弃丑陋头脑的问题。所以:

是否让BaseViewData类成为BaseController类的一个属性是一个坏主意?如果是这样,为什么?

更新1:

我BaseController看起来像(还有更多,但这应该传达出点):

public class BaseController 
{ 
    public string Language {get; set;} 
    public string Locale {get; set;} 
    public BaseViewData Data {get; set;} 

    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
    var l = (RouteData.Values["language"] != null) ? RouteData.Values["language"].ToString() : "en"; 
    if (l.ToLower().Contains("en")) 
    { 
     l = "en"; 
    } 
    else 
    l = "ja"; 

    Data.Language = l; 
    } 
} 

我BaseViewData看起来是这样的(同样,还有更多.. ):

public class BaseViewData 
{ 
    public string Language {get;set;} 
    public string Locale {get;set;} 
    public bool IsOwner {get;set;} 
    public string Menu1 {get;set;} 
    public string Menu2 {get;set;} 
    public string Menu3 {get;set;} 

    public IPagedList<TYPE> ListOfTYPE {get;set;} 
    etc... 
} 
+1

有趣的想法。我可能会使用一个带有BaseController的IViewData。我认为我的IViewData只是一个共享的DTO,没有这样的功能:UserId,UserName和IsLoggedIn或者其他东西......我很想看看你的BaseViewData中有什么。 – rball 2009-12-17 22:53:44

回答

1

对于我曾经在ASP.NET MVC中工作的唯一网站,这正是我们所做的。关于这一点的好处还在于,我们能够在Master Page所需的BaseViewData类中保存值。因为每个View都有一个派生的BaseViewData的实例,所以我们可以安全地使用Master Page的BaseViewData中的数据。

+0

这正是我所做的。工作很好,只是希望我没有准备提高怪物。 :D – Chaddeus 2009-12-17 22:59:51

2

您想法的菜单组件可能不是必需的,使用ASP.NET MVC 2测试版,您现在可以使用Http.RenderAction直接从视图调用控制器操作(例如检索菜单项的BuildMenu操作从资源库中,并返回一个partialview。

Haacked详细信息...

此外,对于简单的内容,如语言/区域设置,如果你使用ASP.NET配置文件提供程序,这可能不是必要的(可通过控制器&查看)

+0

你有没有这种基于ASP.NET MVC的网站使用Profile Provider的例子? – Chaddeus 2009-12-18 00:13:15

+0

我挖掘出能够通过RenderAction直接调用动作的想法...嗯... – Chaddeus 2009-12-18 00:13:49

+0

我认为ASP.NET MVC 2可能会导致我的应用程序发生重大改写......但长期来看可能值得。 – Chaddeus 2009-12-18 00:16:30

1

恕我直言,你正在创造一个怪物。

随着您的应用程序越来越多的功能和全局屏幕将被烘焙到该基本视图模型中。它不可避免地会是一个上帝的代码隐藏类,比如MVC试图避免的.aspx.cs文件。

其更好地使用之类的东西MVC2的或的RenderAction从MVC的Contrib子控制器的东西,即使这意味着打破了MVC模式一点点。

看像CNN甚至Stackoverflow.com一个网站,你会在那里有十几个方法,你知道它之前。

+0

这是你唯一可以想到的问题吗?这也是我的首要关注点,也是我要留在前面的一个问题我是这个应用程序的唯一开发人员,所以不用担心别人在事先没有提供知识的情况下添加东西。 – Chaddeus 2009-12-18 00:19:27

+0

而且,实际上,即使它确实变得有点胖 - 那会是什么样的伤害?在传递一个大型强类型viewdata对象(即使许多属性是空的)时是否会出现某种性能问题?只是好奇......谢谢。 – Chaddeus 2009-12-18 01:15:41

+1

你会违反S责任负责人。您的基本视图模型最终将负责很多事情。 – jfar 2009-12-18 04:04:28

相关问题