Mvc3(1)
摘錄于Pro ASP.NET MVC3 Framework一書:
一. Web Form的缺點(diǎn)
1. view state weight: ?? view state 中保存的數(shù)據(jù)在每次HTTP請(qǐng)求中來回傳遞,且包含的數(shù)據(jù)量可以達(dá)到很大,導(dǎo)致用戶響應(yīng)時(shí)間比較慢,增加了帶寬要求
2.頁的生命周期相當(dāng)復(fù)雜
3.html的訪問性更差 ? 服務(wù)器控件最終以純HTML形式呈現(xiàn),但往往不是以WEB標(biāo)準(zhǔn)呈現(xiàn)的,導(dǎo)致不能很好的利用CSS,且服務(wù)器控件呈現(xiàn)生成不可預(yù)知、復(fù)雜的ID,導(dǎo)致用JS很難訪問到
4.緊密的架構(gòu)不適合用unit testing
?
二、DI(dependency inject)依賴注入
減少組件的耦合度,用到的容器為Ninject
??? public interface IA
??? {
??????? void fun_A(String str);
??? }
??? public class A : IA
??? {
??????? public void fun_A(String str)
??????? {
??????????? Console.WriteLine("{0}", str);
??????? }
??? }
??? public interface IB
??? {
??????? void fun_B();
??? }
??? public class B : IB
??? {
??????? private IA ia;
??????? public B(IA iaa)
??????? {
??????????? ia = iaa;
??????? }
??????? public void fun_B()
??????? {
??????????? ia.fun_A("test in interface IA");
??????? }
??? }
??? public class C
??? {
??????? private IB ib;
??????? public C(IB ibb)
??????? {
??????????? ib = ibb;
??????? }
??????? public void GoTest()
??????? {
??????????? ib.fun_B();
??????? }
??? }
??? class Program
??? {
??????? static void Main(string[] args)
??????? {
??????????? IKernel kernel = new StandardKernel();
??????????? kernel.Bind<IB>().To<B>();
??????????? kernel.Bind<IA>().To<A>();
??????????? IB b = kernel.Get<IB>();
??????????? C cc = new C(b);
??????????? cc.GoTest();
??????????? Console.ReadKey();
??????? }
??? }
//類C 依賴于接口IB, 實(shí)現(xiàn)IB的類B又依賴于接口IA, ? 也可以說是:類C依賴于接口IB,接口IB又依賴于IA,這樣就形成了一條依賴鏈,用DI容器可以自動(dòng)完成相互依賴的接口的實(shí)現(xiàn)類的實(shí)例的創(chuàng)建【面向接口編程】
//用DI容器后,它會(huì)自動(dòng)去理清這條鏈,然后創(chuàng)建相應(yīng)的實(shí)現(xiàn)類實(shí)例,并傳給相應(yīng)的構(gòu)造函數(shù),【也叫構(gòu)造函數(shù)注入】
//依賴注入有三種方式:A.Constructor Injection? B.Setter Injection???C.Interface Injection
?
三、Layout
如果不想引用母版頁,則必須@{Layout = null;}
如果沒有這樣指明,則默認(rèn)為引用ViewStart.cshtml作為母版,而ViewStart.cshtml引用的是_Layout.cshtml,
所以沒有指明的情況下,則是引用_Layout.cshtml作為母版的。
四、Html.RenderPartial與Html.RenderAction
??//這兩個(gè)方法都是用來在界面上嵌入用戶控件的
? (1)Html.RenderPartial("LogOnUserControl");
??//LogOnUserControl是一個(gè)partial view名,也就是在這個(gè)view中定義一個(gè)用戶控件,這個(gè)view必須放在調(diào)用者同一目錄下,也可以放在View/Shared中。可以看出,這個(gè)方法是依賴于一個(gè)partial view的 ?
? (2)Html.RenderAction?????
? //從方法名上就可以看出這個(gè)方法依賴于Action【調(diào)用某個(gè)Action對(duì)應(yīng)的View】,??例如:
? Html.RenderAction("Menu", "Nav");
? //Menu是Action名,此時(shí)會(huì)調(diào)用Menu對(duì)應(yīng)的View,Nav是這個(gè)Action所在的Controller名
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/notebook2011/archive/2012/12/03/2799613.html
總結(jié)
- 上一篇: SQL Server索引进阶第十篇:索引
- 下一篇: TCP/IP 协议简单分析(建立连接握手