最近花了幾個夜晚幫師妹整了一個企業網站


背景:

話說年前有個師妹淚眼汪汪,楚楚動情地找我幫她弄個企業網站。

不過那時候,每天都苦B地閃着:“加班中,相信不用多久升職加薪,當上總經理,出任CEO,迎娶白富美,走上人生巔峰,想想還有點小激動呢”。

所以每夜都懶懶地累到不想動,一直拖延到年后,回到廣州才動有了寫代碼的沖動。

想想畢竟是自家師妹,承諾過的還是要還的,所以打算認真負責的花些時間把它整出來。

 

技術選型:

1:時間考量: 

首先這是一個義務型的網站,所以會考慮時間不能占用太多, 盡量滿足基礎功能,比較異想天開的功能先忽略。

整體前后溝通和小調整,歷長1-2周,實際編碼時間,大概24小時內,換算起時間,那也是三個工作日,六個夜晚啊。

2:技術選型:MVC還是WebForm:

A:時間不能占用過多,開發周期不能拉長。

B:個人能臨時提供的服務器是2003,只有.NET 2.0,后期可能會轉移到對方購買的虛擬主機,所以部署要方便。

C:友好的URL並不是對方在乎的。 

所以綜合考慮:WebForm。

像MVC,它的優點是:提供簡單友好的URL,對外是一個好的唬頭,MVC架構分層思想對新手是一種引導。 

3:數據庫選型:MSSQL?Access?Sqlite?

用MSSQL,在這種簡單的企業站里,大財小用了。

Access:擁有最弱的並發限制,64K,這個在我以前QBlog系列文章里,把它優化上天了,后來還是離開了。

Sqlite:這個需要最高的信任權限,某些虛擬主機商可能會不支持,而且並發能力和Access差不多一個級別。

 

以我多年的實戰經歷,這里我選擇文本數據庫,這里有幾個重要思考因素。

1:數據量少:少到可以預估的時間內,文章不會超過1千。

2:占用資源少:目前VPS就1G內存,數據庫勉強跑上了sql2000,而且服務器上跑了好幾個項目,不適合把這外部的數據放置到自己的項目中。

3:性能要高,抗並發要強:服務器本身配置很低,如果不能抗並發,隨便用我提供的分布式壓力測試就能搞掉的話,那不坑我自己的服務器。

4:數據的安全性隱私木有要求:這些數據都是可公開的。

綜合上面的考慮,MSSQL,雖然能抗並發,這個吃內存,不行,而Access和Sqlite不抗並發,如果選擇了它們,意味着我必須考慮到整個緩存機制或生成靜態頁面機制,這無疑會加長我的開發時間。

 

好在我發現了文本數據庫:剛好滿足以上的條件,而且文本數據庫一直在應用,基本上這個企業站也不在話下,所以最后是用上了CodeFirst方式的文本數據庫。

而選擇文本數據庫,經壓力測試,幾千上萬個並發也不是問題,它天然的內存數據庫機制本身就是緩存機制,一次開發,就可以收工了。


實戰開發:

1:美工的界面來源: 

首先,她不是美工,我也不會美工,所以,網站需要有參考,好在她給了一款參考網站。

所以,以我的經驗,把對方網站那點皮膚弄下來不是什么問題,所以美工的問題看似就解決了,具體看一眼下圖,發現是很清秀簡潔的:

 2:代碼編寫:

由於數據庫選項是文本數據庫,所以基本上就是CodeFirst,定義好業務實體,什么分層,在這里就是浮雲:

 

Web.Config就這么一行了:

< connectionStrings >
         < add  name ="Conn"  connectionString ="txt path={0}App_Data\db;ts=0" />
     </ connectionStrings >

 

具體運行后產生的數據存儲,就在App_Data下的db文件夾下了,一個表就對應一個文本數據了。

另外考慮到文章的字節大,就單獨隔離出來一個body文件夾來存放文章,代碼也很簡單:

public  class ArticleBody
    {
         public  static  void Set( int id,  string body)
        {
             string path = AppDomain.CurrentDomain.BaseDirectory +  " /App_Data/db/body/ " + id +  " .body ";
            File.WriteAllText(path, body);
        }
         public  static  string Get( int id)
        {
             string path = AppDomain.CurrentDomain.BaseDirectory +  " /App_Data/db/body/ " + id +  " .body ";
             if (File.Exists(path))
            {
                 return File.ReadAllText(path);
            }
             return  string.Empty;
        }
    }

 

紅色那一塊是后台,由於偷工減料,所以就不方便公開名稱。


3:技術點需要思考的地方:

整個網站,基本上都是簡單類似以下的代碼:

public  partial  class ArticleCate : System.Web.UI.UserControl

    {
         protected  void Page_Load( object sender, EventArgs e)
        {
             if (!IsPostBack)
            {
                BindList();
            }
        }
         void BindList()
        {
             using (ArticleClass a =  new ArticleClass())
            {
                a.Select( " order by orderNum asc ").Bind(rptList);
            }
        }
    }

不過也有一些需要費點腦的:

3.1:左側的分類列表,有的點擊是直接進入到文章詳細,有的點擊是直接進入列表界面:

面對這個問題,有着最開始的設計思維:

A:分類名稱難道是文章的名稱(因為見過的很多基本上都是同名) ?

B:那么要區分顯示在列表還是單獨的,要在文章里加個字段以區別?

中間的過渡思維:

A:分類名稱就是分類名稱?

B:分類名稱上加個字段,以區別點擊是進入指定的某個文章?

最后的決定性思維:

A:分類名稱還是分類名稱。

B:當分類名稱只有一條文章時,地址變為直接指向那篇文章。

 

3.2:文本編輯器的引入:

一開始我是很偷懶的,用一個文本框來發文章,就想了理了。

后來想想不能懶到這程度,畢竟人家是師妹啊,何況我還單身,所以引入文本編輯器升級一下檔次也是有必要的。

網上可選的編輯種類很多,FCK,King等網上一搜一個堆,不過我還是思考了一下,如果用上這些:

第一,重,隨便一個都幾M起步;

第二,圖片上傳需要自己再折騰,如果運氣不好,研究+實現可能會花上一天時間。

第三:我太懶了,我想最多1小時以內就把它給換完。

 

我想到以前QBlog里我寫過一個編輯器(改來的),於是直接弄過來,發現原來的代碼和QBlog的開發模式有點結合。 

花了幾分鍾,改了點代碼,基本上就能用了,而且重點是文件上傳,基本上小改幾分鍾也適合着用了,省了不少時間。

 

 

3.3 產品中心lightBox.js的引入:

這一塊就沒什么好說的了,就是那種一點圖片出來一遮照層,整個背景黑的那種,06年就開始流行的,沒想到現在還用的上。 

關於后台:

對於后台,一開始打算用QBlog那種后台方式,或者像EasyUI那種前端,然后搞個CodeSmith批量生成一樣,不過一想到這CS不知道放哪了,光找出來就要不少時間,再說它也不支持我的文本數據庫。

雖然CodeFirst也支持多種數據庫,改個數據庫鏈接就可以轉移到其它數據庫,然后再借CS去生成,不過感覺這轉來轉去的麻煩。 

於是,心一橫,就那幾個表,也就幾個界面,還不如手工來的快,於是一個木有樣式,慘不忍睹的界面,只有最簡單的增刪改查邏輯的后台就出來了。

由於后台界面這一塊太丑,就不截圖了,免的亮瞎了大伙的眼睛。

 

網站預覽(已失效):http://paileju.com
至於源碼,想要來學習的也可以Q我,隨便給。

總結:

到此,基本上就算完工了,搞完之后,收到了師妹寄來的零食,也算是一種回報了,雖然大部分零售是辣的不合我口味,不過還是有不少零售味道還是不錯的,像那個1塊錢1個的肉松餅就很好吃,可是,為啥只買了一個,納尼?

 

新的一年,要重新賣身了,打算漂泊,城市不限,歡迎大伙推薦買主,謝謝。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM