2010-12-17 107 views
1

我有一個客戶的要求。他們需要三個不同地區的博客Web應用程序。每個應用程序都有自己的數據和帖子。可能他們想要在這些應用程序之間共享用戶信息。這些應用程序的用戶界面將相同,除了每個博客的CSS級別更改(顏色,字體和樣式)以及主頁上的一點點佈局更改。這給我帶來了很多問題。不同地區的網站

三個獨立的網站approah 1.是好開發三種不同的網站,爲每個區域和三個子域部署它們? 2.我要爲每個地區使用相同的數據庫或個人數據庫嗎? 3.如果有三個網站,我將如何克服緩存,會話共享和用戶登錄(單點登錄),多重部署,代碼重複問題?

單一網站方法 1.創建一個單獨的網站,單獨的區域像sitename/regionname? 2.如果是單一站點,性能和可伸縮性如何? 3.只需使用單數據庫,即可在三個區域之間共享。那是好方法嗎?

可能有更多的可能性。現在我需要你的指導,即所有其他未知的問題會發生,我將如何逐一處理這個問題,並得出哪個最好的結論?

我們可以在C#中實現這個解決方案。

編輯:這些網站將是英文

回答

1

在這裏你有很多選擇,所以你需要從客戶端獲得一些好的信息。

您提到網站之間會有佈局變化。這部分在這裏說,你可能會更好用三個不同的網站爲用戶界面。這可能是一個很好的假設,他們將要在個性化的基礎上改變UI到每個站點。將所有這些構建成單個引擎是很困難的。

這三個人都可以共享一個數據庫,你只需要確保每個帖子,配置文件等都有一個SiteId與他們關聯。您還需要確保您編寫的每個查詢都使用該SiteId值。這種情況被稱爲多租戶架構。

緩存處理就像緩存一個站點一樣。

寫完所有這些之後,我發現通過簡單地使用現有產品(如WordPress或類似產品)以及爲您的目的創建模板可能會更好。

0

這是不好開發3個不同的網站。維護將很快變成一場噩夢,代碼將非常繁瑣。

將其分解爲服務(SOA)面向服務的體系結構。這是語言不可知的。所以如果你使用C#,PHP,Java或者Python,那麼一般的想法是一樣的。

1.)創建一個用戶服務來認證用戶。

2)創建一個博客服務來處理存儲,檢索和編輯博客。

3)創建一個單一的網站與服務進行通信,並使用本地化。

使用服務具有能夠改變數據庫設計,數據庫管理系統,等等,而無需改變核心應用程序的好處。

在用戶服務店某種本地標識符,使您的單個站點能夠基於本地化的規則。所有主要語言都有本地化設置做最適合你的工作,如日期格式,貨幣等...

注:這是最好的用戶註冊過程中獲得地區名稱 - 不是在登錄。

甲設計像上面所描述的使代碼更易於維護 - 相比3個獨立的位點。

0

它應該是一個單一的網站,它應該是一個單一的數據庫。可伸縮性是它自己的另一個問題。你期望什麼樣的流量?

無論如何,看看nvidia。com,這個網站是爲全球不同地區設置的。在大多數情況下,它仍然是同一個網站。某些部分可能在不同的國家/地區託管,但它們可能連接到同一個數據庫或一組同步數據庫。

另一個最重要的事情是,你想要所有的網站是完全一樣的,但只是用不同的語言?如果是這樣,這將只是簡單的文本替換,或者您的數據庫將被設置爲您的應用程序可以輕鬆地從不同語言切換內容的位置。

您的項目在規劃階段肯定需要很多時間。你需要確保你確切地知道你的客戶需要什麼,因爲這通常與他們想要的不同。爲您的客戶計劃一些選項,並介紹這些選項的優缺點。然後讓他們決定。

1

我最近有過類似的設計問題,所以讓我與你分享我的方法(無論你認爲它是錯的還是正確的!)。我去了一個單一的網站,單個數據庫加上主機頭。

我做的第一件事就是創建一個域表。它看起來像這樣:

_domains: 

    _id INT IDENTITY NOT NULL 
    _domain_name NVARCHAR(255) NOT NULL 
    _id_category_root INT NOT NULL (foreign key to _categories::_id) 

這使我可以爲內容類別指定一個頂級域名。內容類別屬於這些域。

_categories: 

    _id INT IDENTITY NOT NULL 
    _category_name NVARCHAR(64) NOT NULL 
    _id_parent INT NULL (foreign key to _categories::_id) 
    _theme_root NVARCHAR(64) NOT NULL 

_theme_root字段指定了根目錄中的默認主題文件夾。這允許每個類別(可選)具有不同的CSS,並且如果需要的話,可以有不同的母版頁。這使得內容類別看起來完全不同(CSS,圖像和佈局),甚至只使用默認母版頁的CSS。

而且,正是如此,內容屬於一個類別:

_id INT IDENTITY NOT NULL 
    _id_category INT NOT NULL (foreign key to _categories::_id) 
    _content_title 
    -- other fields 

我抽象這種方式,因爲你可以有相同的類別級別的多個域:

enGB.mysite.com -> category 1 
    www.enGB.mysite.com -> category 1 
    frFR.mysite.com -> category 2 

在我的代碼中,我查看主機頭並適當地選擇類別,爲內容和其他表創建分類表的分支。如果主機頭不匹配,我會回到默認的(英文站點)。

編輯:添加註釋主題。

0

有可能是一個單一的網站...並與該單一網站你也可以使用它與不同的網址... 我的意思說網站是一個單一的和所有用戶使用此網站與不同的網址,使他們下跌他們有自己的網站..但實際上只有一個網站.....有一個數據庫.... 其可能..和它的最佳途徑.....