Asp.net MVC 仿照部落格園的簡單網站首頁 列表設計

來源:互聯網
上載者:User

本來我打算採用ajax提交請求,非同步請求擷取資料,但是我發現如果這樣的話就會拖慢開發的進度,拖長時間。所以在這篇部落格中仿照首頁的列表設計其實和左側列表網站分類採用了同樣的方式,通過局部視圖的方式呈現。

我在顯示的時候採用了htmlHelper的RenderAction方法,至於我為什麼特別喜歡用這個方法來組件一個頁面?我的回答可能就是個人喜好,畢竟我看的Mvc書籍中也沒有說必須採用哪種方法,或者哪種方法更好,但是我記得在哪個部落格中看到過html.Action和html.RenderAction的效能差異?RenderAction的效能會好那麼一點點?只是一點點。所以我記住了這個方法,如果沒有特別說明,我一直都是採用這種做法。如果您有其他意見,可以提出來,畢竟我的知識有限,可能存在錯誤。

在開始之前我還想囉嗦依據,就是我在第一篇部落格中說過,會採用到IOC、Nhibernate等架構來協同的開發這個小型的網站,我一般採用的方式都是先採用原始的方式操作,然後再通過採用這些架構來展示它們強大的威力。這樣更容易理解,也更有說服力。當然,我沒有當過老師,可能我的這種做法是錯的,但是我當過學生,我個人認為這樣是一個好的方式。還是那句話,如果您有更好的意見,歡迎您提出來,我會積極改進。

言歸正傳,下面開始:

首先我們來分析一下部落格園的首頁列表設計,在列表中最主要的就是標題、簡略的內容(說到內容,我想起來在設計資料庫的時候有園友提出來,可以把內容單獨的放到一個表中,這樣便於Lucene.net建立索引。我對他的意見也很同意,但是我最後還是把部落格內容放到了部落格表中。因為我發現如果單純的把部落格內容放到一個單獨的表,因為我發現我我在做部落格園的找找看功能的時候也是可以通過查詢資料庫來建立索引,放到單獨表中可能增加靈活性,符合資料庫設計規範,但是我認為好的設計不一定會完全符合資料庫設計(比如冗餘),我並不是說我的資料庫設計很好,到現在為止,我也在不斷的調整資料庫,插曲)、作者(使用者名稱)、發布時間、評論次數、閱讀次數,這些資料顯示。當然下面還需要一個分頁,我現在先不採用Ajax方式非同步請求,我先採用MVCPager進行分頁,以後在完成這些小功能進行重構的時候我們再一起修改成ajax。或者我修改成ajax,提交代碼,大家看一下,因為畢竟這個分頁沒有什麼好說的。網上有現成的分頁代碼,每個公司也都會有。

通過分析,部落格標題、內容、發布時間我們可以從部落格表中取得資料,使用者名稱需要通過該部落格AuthorID尋找對應的AuthorName,評論次數則可以通過評論表、閱讀次數可以通過部落格閱讀次數表來擷取,具體的資料表結構我就不細說了。

我們在項目要採用Autofac(IOC組件)來進行依賴注入,通過建構函式注入,避免在需要的地方需要逐個的定義類的執行個體。關於IOC—AutoFac,我打算下次專門做一個小例子來顯示一下。部落格園中關於Autofac的講解也有很多。

既然要使用Autofac,那麼我們就需要註冊類型。首先我們在global.asax中註冊介面以及實作類別。

public void ReigsterOnApplicationStart()
       {

           var builder = new ContainerBuilder();//構造一個容器
           var iservices = Assembly.Load("IServices"); //Iservices是所有提供具體執行個體的介面所在命名空間
         //  builder.RegisterAssemblyTypes(iservices);
           var data=Assembly.Load("ImpServices");//這個是具體實作類別命名空間
       //    builder.RegisterAssemblyTypes(data).AsImplementedInterfaces().SingleInstance();這種方式表示會建立單個執行個體,也就是設計模式中的單例模式,在整個的應用程式中只有唯一的執行個體存在
           builder.RegisterControllers(Assembly.GetExecutingAssembly());//註冊所有的controller
           var container = builder.Build();//建立具體的執行個體
           DependencyResolver.SetResolver(new AutofacDependencyResolver(container));//設定MVC架構的依賴注入解析器為AutofacDependencyResolver並且將註冊的類型執行個體傳入  這就是MVC的擴充一方面
       }

在定義好了或者說配置好了AutoFac以後,就需要在應用程式初始化的時候進行註冊,這樣這些變數才可以在程式啟動的時候就開始工作。在Application_start方法中進行註冊。

protected void Application_Start()
       {
           AreaRegistration.RegisterAllAreas();
           ReigsterOnApplicationStart();//註冊AutoFac
           RegisterGlobalFilters(GlobalFilters.Filters);
           RegisterRoutes(RouteTable.Routes);
       }

通過以上方式就可以在程式中使用Autofac架構所帶來的便利,當然會有網友大呼,那麼簡單,的確通過這些配置(或者應該叫註冊,因為配置很容易聯想到XML)就可以輕鬆的實現依賴注入,在程式中進行使用了。

我在中間多說一句,這些架構使用起來都很簡單,但是要正確的使用還是要花些功夫的,畢竟web form如果只是托控制項,確實比Java要簡單一萬倍,這也就是Java程式員有時會看不起我們.Net程式員的原因我想。但是真正在實際的項目中,正確的使用,那我們真要仔細研究一下。

在我們註冊了Autofac之後,就可以使用了?我們通過建構函式注入(依賴注入方式分三種:屬性注入、建構函式注入、介面注入)來應用到本項目中。

因為我們目前要實現的功能是首頁中間列表功能,所以我們就以這個為例。

首先我們要建立BlogController負責所有的與部落格相關的邏輯。在建立好BlogController之後,我們要建立BlogController的建構函式,如果不使用AutoFac,我們根本不需要建立BlogController的建構函式。我會在代碼後面進行必要的注釋

 

public class BlogController : Controller
   {
       //
       // GET: /Blog/
       private readonly IBlogServices _blogServices;//定義部落格服務類介面
       public BlogController(IBlogServices blogServices)//BlogController的建構函式,裡面會傳遞一個IBlogServices (部落格服務類BlogServices的介面)
       {
           this._blogServices = blogServices;
       }
       public IBlogServices BlogServices
       {
           get
           {
               return _blogServices;
           }
       }
       public ActionResult Index(int pageNo, int pageSize)
       {
           IBlogServices blogServices = BlogServices;//我在這裡是通過屬性值擷取到傳遞進來的執行個體變數
           List<BlogInfo> listBlog = blogServices.GetBlogListWithPageNo(pageNo, pageSize);//調用具體執行個體類BlogServices的方法返回必要的資料,這裡返回的就是需要在首頁顯示的資料 PageNo表示頁數,PageSIze表示每頁顯示的個數
           ViewBag.BlogList = listBlog;//我通過Viewbag進行值的傳遞,有的園友提出來我為什麼不採用在View(object)這種方式傳遞,我的回答是採用View(object)需要在View層定義這種類型,我一般習慣在View層定義類而不是這種List<BlogInfo>的形式(個人習慣,沒有好壞之分)
           return View();
       }
   }

 

我說了那麼多我自己看了都很討厭的話,其實我不是一個說話很多的人。現在來看一個例子表示我沒有說假話吧

 

首頁列表可以正常的顯示了,但是裡面還有一些細節我還沒有來得及處理。比如點擊推薦按鈕數值就要加一,通過點擊評論可以到達詳細內容頁的評論列表。這些細節問題我都會慢慢解決。畢竟這才是最浪費時間的地方。

總結一下把,在這篇部落格中說是介紹首頁列表顯示,倒不如說是顯示了一下如何簡單利用Autofac進行依賴注入,算是意外收穫吧。關於依賴注入的相關知識,還請大家參考園中其他高手的部落格。我也會在近期整理一下我的筆記,把其中我發現的一些問題描述一下,雖然寫這些字很快,但是準備很費時間啊,希望園友們不要責怪我沒有很好的完全這個功能的全部。

代碼我已經託管到codeplex,有興趣的朋友可以一起討論,一起開發。

http://www.cnblogs.com/jiagoushi/archive/2012/12/08/2809152.html 在這篇部落格中可以找到

索引:

Asp.net MVC 仿照部落格園的簡單網站首頁 列表設計 (2012-12-11 22:21)            
為什麼要從Web form過渡到MVC中 (2012-12-09 22:43)            
Asp.net MVC3 企業網站系統高仿部落格園 首頁左側列表頁面 實現效果 (2012-12-08 19:11)            
Asp.net MVC 3 開發企業網站系統仿照部落格園部分功能--總體設計 (2012-12-05 23:41)            
Asp.net MVC 3 開發簡單的企業系統開篇--資料庫 (2012-12-03 21:03)            
Asp.net MVC 3 開發一個簡單的企業網站系統

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.