2012-08-28 65 views
0

我正在設計一個博客的過程。我的OO設計經驗非常有限,所以我認爲嘗試和提高我的技能是個不錯的主意,但是我正在尋求如何最好地解決這個問題的建議。基本對象設計問題

我正在寫一個簡約的博客工具。我有一個博客對象(類博客),我有一個文章對象(類文章)加上我也有一個存儲對象(類)。該博客有創建新文章,列出它們等的方法。文章處理文章特定的元數據(即帖子標題,帖子正文,創建日期,上次更新,公開或不公開等)和存儲對象(類存儲)whic可以是你的平均數據庫或文件夾,SCM倉庫等

現在,首先,出於無知,我開始通過定義一個類層次結構,其中類文章擴展的類博客。這看起來並不是很正確,因爲沒有特定的需求來使用博客的方法(或者甚至覆蓋他們)。所以我試圖從兩個單獨的類(博客和文章)和博客將分配和保持文章對象的私有列表(每篇文章之一。)

現在,存儲類必須在景觀某處堵塞,我不太肯定,或如何去做。有什麼建議?我正朝着正確的方向走嗎?

感謝

+1

這個問題可能太模糊,並且對Stack Overflow來說過於寬泛。它也可能更適合http://programmers.stackexchange.com。我標記了你的帖子以要求移動(這並不意味着它,它只是一個標誌)。 –

+0

等待從PSE mods聽到這是否會在那裏更好地工作。 – Kev

+1

在您的示例中,博客更像是一個容器,可能包含文章。所以兩者之間的關係不是繼承關係,而更像是遏制(或聚合) –

回答

1

只是一些想法分享

1)通常的編碼和設計將從事後受益。繼續,寫一個原型,並讓它工作。一旦你獲得了一個功能性的代碼庫,你就可以開始重構並重構OO結構。 Python對此非常完美。

2)的基類應該是儘可能通用。如果我是你,我可以定義一個基類Publishable。然後,我可以從Publishable擴展類Blog。將來我可能會添加不同類型的文章,例如報價,圖片和鏈接(以Tumblr爲例)。

Publishable I類將實施較低水平的邏輯,如持久性和通用元數據(如發佈時間)

+0

謝謝,我似乎聽說這個「持久性」的事情在很多OOP相關的帖子。你能解釋得更好嗎? – CaseyJones

+0

@CaseyJones這裏有一個簡短的答案:持久性是關於將對象保存到數據庫中的。你可能想看看sqlalchemy這個非常強大的python持久化庫。我會看看我是否可以在今天晚些時候準備更詳細的答案 –

1

它好像你是相當新的面向對象的概念如此,而不是試圖去解釋,我會只是指出你在正確的方向。我相信在你完成這項任務之前,你仍然有相當數量的自學研究/學習。

如果你把一個面向對象的過程中,他們會說的第一件事就是遺傳模型的「是」的關係。正如你所見證的,文章不是博客,這就是繼承感覺不自然的原因。當您爲polymorphism使用繼承時,您將獲得最大的回報。所以對此做一些研究。

其次,「掛鉤」你的存儲對象,許多應用程序遵循分層的方法。每個圖層都與上面/下面的圖層進行交互。一種方案可能是

Layer 1) User Interface 
This layer displays the UI (command line or GUI) and reads user input 

Layer 2) Application Logic 
This layer will perform the actions that end-users need the system to do. Some things 
in this layer may be: sign up new user, create new blog, create new article 

Layer 3) Storage Layer 
This layer interacts with the underlying data store (database, file, whatever) 

每層都可以與相鄰層進行通話。對多層應用程序進行一些研究。

祝你好運!

-1

在建築方面,我不相信,你需要一個博客類,因爲博客是你的整個應用程序。你可以有一個文章類,評論類,用戶類等...

要知道class A是否應擴展class B,您可以問自己,如果AB。例如,如果您代表動物園,並且具有類別LionAnimal,LionAnimal,那麼Lion延伸Animal

對於存儲部分,我推薦使用數據庫,如MySQLPostgresql。 你可以用python用適當的驅動程序來控制它們(mysql的mysqldb,postgres的psycopg2)。

或者,您可以使用框架,如django。它將負責存儲您的課程,幫助您組織您的代碼,並使您從應用程序中構建網站變得更容易。

+0

這不是一個動態的網絡博客。它將成爲一個平坦的博客,即它可以離線生成可以複製到主機的東西,所以django在這裏不是最好的應用,我試圖應用KISS原則。 – CaseyJones