是什麼限制了我們物件導向(的開發)

2021-05-06 18:28:46 字數 3360 閱讀 7235

是什麼限制了我們物件導向(的開發)

今天看到csdn中的兩個討論貼,乙個帖子

在說技術經理不允許團隊成員使用物件導向的方式開發程式,另外乙個帖子(找不到位址了)說某個團隊成員在嘗試使用物件導向的方式設計和寫程式,但是遭到了其它程式設計師的鄙視。

或許你也在鬱悶,為什麼跳槽了這麼多公司,想學一些物件導向的開發方式,怎麼弄來弄去都還是基於物件(基於物件導向框架的開發)的開發呢?我想,其中的原因可以從幾個方面來說:

公司

1.公司性質

如果公司本身就是乙個面向小客戶(比如製作小**)、面向外包的小公司,或者公司並不小,但是公司的開發團隊僅僅屬於公司的後勤部門,開發的產品並不能給公司帶來利潤等等原因都可能使得開發向簡單化、過程化發展。

2.管理團隊

就像前面那個網友說的,技術經理不允許物件導向開發。可能技術經理看的是專案的維護性、看的是專案的進度,而沒有看到專案遠期的維護性和擴充套件性。也可能技術經理並不反對,而他的上司是非常看重眼前利益的,技術經理也無能為力。管理團隊的任何乙個層次都可能會對開發模式產生影響。

專案

正因為有前面說的那些公司,導致專案往往有以下的特點:

1.專案進度非常趕並且乙個接乙個。我們除了能運用成熟的開發流程、框架之外**還要時間思考過多的問題呢?

2.專案的可維護性和可擴充套件性不重要,甚至有的專案要求就是可維護性差、可擴充套件性差(公司希望專案賣出去之後從客戶那裡獲取更高的維護費用)。

3.專案非常小,而且偏向於**。由於**以資料為中心、業務邏輯較少並且注重效能的特殊性,要在這樣的專案中推行物件導向的開發確實是實際效果比較差的。

團隊

由於公司的性質或專案的性質就導致了產生了這樣的一些團隊:

1.開發人員水平參差不齊。這裡的水平包括基礎、經驗以及學習能力。由於物件導向需要開發人員有一定時間的oo思想的積累,對於這樣乙個團隊,即使推行了oo,不知他們之間的協作會有什麼問題呢?

2.開發人員沒有良好的oo背景。有些人以前是做asp的,有些人以前是做vb的,可能對於做asp.net的開發人員來說有asp和vb背景的人比較多。這樣的話就會導致難以整體轉化開發思想,即使轉換了,代價也比較大。

3.團隊中沒有對oo經驗豐富的人,或者從組織結構上說,團隊中並沒有設計師的角色,專案經理手下都是普通「老百姓」。

4.團隊的學習氣氛不好。很多團隊死氣沉沉,上班-下班,團隊中也有很多年齡較大的程式設計師,要在這樣的團隊中推行新的開發思想確實很難。

5.團隊過於龐大。

6.更極端的情況是,團隊中所有人都是只會增刪改的初級程式設計師,而專案經理完全不懂技術(招聘的時候只求工資低,面試只看是不是會使用控制項進行增刪改)。

技術

如果團隊已經習慣了基於過程化的開發,那麼要向物件導向開發進行轉換還需要解決非常多的關鍵問題:

1.持久化

關係型資料庫和領域(業務物件)模型之間有比較大的差異,我們不得不依靠一些orm框架來實現業務物件的持久化,orm框架的效能、orm框架的學習難度、orm框架的可靠性都是在把框架應用到專案中需要考慮的問題。

2.物件呈現

業務物件往往是相互關聯的複雜結構,而ui往往是平面化(一維或二維)的趨向於關係型資料庫一種表現方式,這個轉換過程可能會很複雜,所謂的物件導向是不是沒事找事把關係型資料轉化為業務物件,再把業務物件格式化成ui喜歡的資料來源(比如datatable)呢?

3.效能

前面說的2點都可能會產生效能問題。首先,表現層是否需要完整的業務物件,其次,是否需要從資料庫中獲取完整的業務物件。如果介面上只希望顯示10k資料,而orm框架卻從資料庫中獲取了100k資料並且把它們都傳給了表現層,是不是不太合理?如果說還引入了分布式的話,那麼網路上傳輸的代價就會更大。從小的層次來說,物件導向本身就或多或少降低了效能。

主觀原因

如果上述這些客觀原因都不存在的話推行物件導向開發還有難度,那麼可能還有一些主觀原因存在:

1.給自己很多不使用oo的理由。拿到專案了,總是想專案太小、進度太緊,算了這次不嘗試oo了,以後遇到其它專案再來嘗試吧。沒有小專案的思考,怎麼能遇到大專案而不慌亂呢?

2.沒有責任心。希望盡快結束專案,在專案可維護性變得很差連自己都不想維護的時候往往也是我們引咎辭職的時候。

3.沒有轉換的動力。大家沉浸在乙個不錯的過程化開發過程中,寧可願意把維護的工作留給新來的同事也不願意去嘗試新的開發過程。

理想的環境

你或許一直在尋覓這樣乙個環境:

1.不錯的公司,從事大型企業級軟體的開發,有著經驗豐富並且開明的專案經理。

2.專案周期長、專案大且複雜,客戶對專案的維護性和擴充套件性要求比較高。

3.團隊中不乏經驗豐富的構架師和oo達人,團隊討論氣氛良好。

4.有完整的基於物件導向的解決方案,開發流程非常正規。

說實話在國內確實很少。很多時候,我們能看到的也僅僅是在表面上非常好,而在真正的開發過程中發生扭曲的環境。

說說我們的情況

1.專案是為公司的產品服務的,團隊的產出不會給公司帶來直接利潤,也不是公司的技術核心。

2.團隊不大,團隊成員水平相差較大,以我為90分的話,那麼團隊中有20分的,也有80分的。幾乎所有人都有非oo語言的背景,也可以說是由於asp.net而接觸c#的,而不是由於c#而基礎asp.net的,導致基本沒有任何oo概念。

3.專案都是不超過2個月的超小專案,甚至會有很多2天的「專案」(其實就是做乙個頁面)。專案基本都是以資料為中心的**,而且對效能要求非常高。專案對時間要求非常苛刻,說好這個時間點連一天都不能晚。

基於這些情況,我思考了很久還是決定以一套學習曲線低的構架、流程來開發這些專案。不過,這並不是說我們永遠就是過程化開發了,我會在時機成熟的時候把一套合適的物件導向開發流程推給團隊(請注意這裡的「時機成熟」以及「合適的」兩個詞)。個人認為,只要有明確的開發方式、相對成熟的開發框架,上面的3點並不能擋住我們oo的腳步(「我們」僅指我們團隊),只不過,我還在尋找乙個合適的切入點。

討論

基於這些客觀或主觀原因(其實,往往這些原因是交錯的,因為這個也就產生了那個),真正物件導向的開發(包括完善的開發流程)在國內大多數公司(包括我們公司)中難以推行,(由於快下班了,我並沒有過多去思考改善的方法)請大家討論…………(本文只是總結一下現況,並不表達過程化開發和物件導向開發的優劣)

所屬話題:

關於物件導向的討論

是什麼限制了你的成功

一 沒有行動 一 沒有慾望 只希望平平安安的過一生 1 恐懼 恐懼未知世界,恐懼一些未曾做過的事情 建議 學習成功方面的資料,但不能對成功學上癮。2 害怕失敗 注 改變想法,讓自己的人生過得更精彩!二 不知道方法 1 聚焦 這個世界太大了,你需要聚焦,集中你的優勢 2 學習 3 調研 三 完美主義者...

物件導向是什麼?為什麼要物件導向

一 物件導向,這個物件到底是什麼?這個物件不是c 中的例項,c 中我們把乙個類的例項也叫做物件,這種物件嚴格的說應該是物件導向的程式設計實現 oop 中的物件,物件導向程式設計,也不是面向類的例項程式設計。物件的定義是人們要進行研究的任何事物,從最簡單的整數到複雜的飛機等均可看作物件,它不僅能表示具...

物件導向的程式設計 物件是什麼?

與面向過程的語言 例如 c 不同的是,物件導向的語言裡面所關注的不再是具體的,瑣碎的過程,不再是對變數直接的運算,它所關注的是乙個個物件,是物件之間的互動。1 萬物皆物件,可以將現實世界中的任何乙個實體視為物件,而所有的具有某種特徵的物件統一為乙個類,類裡面定義了物件的域和操作。現實世界中並不存在類...