討論區快速選單
知識庫快速選單
Excel也能做到大數據分析? 討論區最近新進100則主題 網路投保旅行平安險
[ 回上頁 ] [ 討論區發言規則 ]
資料庫欄位與物件屬性的關係
更改我的閱讀文章字型大小
作者 : dingchu35(3維POM模式>)
[ 貼文 9 | 人氣 3971 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/6/23 上午 08:16:37
我是個PHP程式設計新手
最近在嘗試將公司既有的程式碼物件化
過程中產生了一些疑問

假設資料庫有一個Table User
裡面有ID,userName, address, phone等很多欄位
那今天我想建立User物件時,是不是應該將資料庫所有欄位
都視為該物件的屬性呢??

另外,我看深入淺出物件導向分析與設計一書時,裡面有一句話提到
"若你物件的某個屬性時常具有空值或Nul的特性l,那他是否不應該是該物件的一部分"
這句話的正確性??

當使用者觸發某一個動作時,物件可能會執行一個或數個方法,但這些方法並不一定需要所有的屬性值
基本上資料庫會select 所需欄位 from user,再將取得的欄位值丟到物件的屬性
然後使用物件去執行一些方法($obj->fetchPassword())
因此產生的User物件常常都不會是所有屬性都有值啊~~

作者 : jasper(Jasper)討論區板主 程式設計甘苦談頂尖高手上班族的哈拉園地優秀好手貼文超過1000則人氣指數超過70000點
[ 貼文 1403 | 人氣 96053 | 評價 6980 | 評價/貼文 4.98 | 送出評價 42 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/7/5 上午 10:17:34
User 物件的屬性未必要與 User Table 的欄位相對應,至少我是如此覺得。

程式運作時,大部份的資料都會儲存在變數中,也就是物件的屬性。但資料真正的存檔也許就在資料庫的資料表中,所以要再寫一個物件專門用於存取資料庫的資料。

class UserInfo
{
    public $ID;
    public $UserName;
    public $Address;
    public $Phone;
}

class UserDAL
{
    public function GetOne($ID)
    {
     $SQL = "SELECT * FROM User WHERE ID ='$ID'";
     ....
     return $aUserInfo;
    }
    
    public function FetchPassword($ID)
    {
     $SQL = "SELECT Password FROM User WHERE ID ='$ID'";
     ....
     return $Password;
    }
}

我習慣類似上面的寫法,UserInfo 會在程式中到處存在,它的產生是透過 UserDAL 而來。UserDAL 就是一個專門存取與 User 有關資料的物件。我用這種方式來架構我的程式。

在三層架構中,BLL 與 DAL 總是分開的,由 UserDAL 產生 UserInfo 是合理。如果只想取得 User 的 Password,透過 UserDAL->FetchPassword($ID) 單純的取得就可,不用整個欄位資料都取得。事實上,在 UserInfo 中也未必要 Password 這個屬性,系統運作中,UserInfo.Password 的用處不大。

怎麼去定義物件的屬性,要看實際的功用,不要把物件的屬性與資料表的欄位劃上等號,因為有時一個物件的所有值,不是由一個資料表產生,想想關聯式資料表的狀況就清楚了。
作者 : internaltide(internaltide)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/8/16 下午 01:30:56
所以物件屬性的決定,在某部分是需要看方法存取的頻繁來決定? Right?

例如某個屬性幾乎在每個方法都會用到,這時候就應該把他設為物件的屬性之一,

然後物件建立後也將屬性值給定一次即可,往後物件方法的呼叫就可以直接取用該屬性。
作者 : jasper(Jasper)討論區板主 程式設計甘苦談頂尖高手上班族的哈拉園地優秀好手貼文超過1000則人氣指數超過70000點
[ 貼文 1403 | 人氣 96053 | 評價 6980 | 評價/貼文 4.98 | 送出評價 42 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/8/20 上午 09:44:38
>所以物件屬性的決定,在某部分是需要看方法存取的頻繁來決定? Right?
>
>例如某個屬性幾乎在每個方法都會用到,這時候就應該把他設為物件的屬性之一,
>
>然後物件建立後也將屬性值給定一次即可,往後物件方法的呼叫就可以直接取用該屬性。

差不多就是這個意思。

程式設計有時得在時間(運算速度)與空間(記憶體容量)之間取得平衡,或選擇優劣,再決定如何寫程式。
 板主 : Clark
 > 物件導向程式設計 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 物件導向程式設計 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
物件導向程式設計
1 Arthur 180 
2 藍色LED 150 
3 長長 100 
4 Linkin 100 
5 love seeker 100 
6 Raymond 90 
7 Nets 80 
8 nop 70 
9 Huah 70 
10 矇矇 60 
物件導向程式設計
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2018 程式設計俱樂部 http://www.programmer-club.com.tw/
0.03125