台灣最大程式設計社群網站
線上人數
548
 
會員總數:245463
討論主題:189220
歡迎您免費加入會員
討論區列表 >> VB.NET >> Class裡面的屬性太多 該怎麼辦?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Class裡面的屬性太多 該怎麼辦?
價值 : 50 QP  點閱數:763 回應數:15

樓主

city
初學者
130 43
1597 229
發送站內信

請問各位前輩們:


寫程式時遇到一個問題:Class裡面的屬性太多了

如果Form要呼叫這個Class的Sub AA 需要先設定Class裡面全部的屬性(要先給值)
漏一個屬性都不行

下面設定一個範例 (範例故意用的誇張一點)

範例裡的屬性如果全部要設定完 可能需要100多個值
(因為還有陣列)

1.如果使用New 可以強迫使用者輸入全部的屬性 可是這樣New會有100多個Byval值
2.不使用New 這樣使用者可能會漏掉某個屬性

大大如果遇到這樣的狀況 該怎麼處理?
謝謝~~



搜尋相關Tags的文章: [ Class ] , [ 屬性 ] , [ 多 ] ,
本篇文章發表於2017-10-18 18:29
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
不錯的參考

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
其實,我搞不太清楚你想問什麼。
看不出你的問題在哪。
本篇文章回覆於2017-10-18 18:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

city
檢舉此回應
目前是用這個方法:

Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim nc As New Class1
With nc
.a = {ToolStripButton1, ToolStripButton2, ToolStripButton3}
.b = {Form1, Form2, Form3, Form4, Form5}
.c = ListBox1
.d = Timer1
.e = {"A", "B", "C"}
.f = "VB.NET"
.g = Button1
.h = TextBox1
.i = {5, 10, 15, 20}
.j = Me
.k = Me.Panel1
.l = {LisBoxA, LisBoxB, LisBoxC}
.m = {TextBoxA, TextBoxB, TextBoxC}
.n = {TextBoxAA, TextBoxBB, TextBoxCC}
End With
nc.AA()
End Sub
End Class

不知道有沒有更好的方法?
本篇文章回覆於2017-10-18 18:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

city
檢舉此回應
目前是用這個方法:



不知道有沒有更好的方法?
本篇文章回覆於2017-10-18 18:43
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

city
檢舉此回應
如果是用New 就變成:


本篇文章回覆於2017-10-18 19:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

city
檢舉此回應
To:浩瀚星空

我的意思是Class1裡面的屬性太多了
Form1需要使用到Class1的Sub 就需要先設定好Class1全部的屬性值

我知道的方法有兩種:
1.使用New來強迫使用者輸入全部的屬性
2.不使用New (但是這樣使用者可能會少輸入一些屬性)

像這樣的狀況 不知道有沒有比較好的處理方法?
本篇文章回覆於2017-10-18 19:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

city
檢舉此回應
使用Class1的Sub之前 一定要先設定好Class裡面全部的屬性
(因為Sub裡面會用到全部的屬性)


1.如果使用New(建構式)來強迫使用者輸入全部的屬性
這樣New的Byval參數會很多
Form裡面要輸入很多New Class的Byval參數

2.如果不使用New(建構式)
會怕使用者漏打一些屬性
要如何防止使用者漏打屬性?

3.是否有其它更好的方法?
本篇文章回覆於2017-10-18 19:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

誰是誰
檢舉此回應
(1) 類別內部自己給初始值不就好了
(2) 就大部分的情形而言,一個不是對應資料的類別 (就俗稱的 Model) 如果會屬性太多,大概都是設計錯誤。
本篇文章回覆於2017-10-18 20:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

city
檢舉此回應
如果在業界的話

要使用Class1 Sub AA 的話會怎麼做呢?
(Sub需要用到很多屬性值)
(又怕使用者少輸入到部分的屬性值)
本篇文章回覆於2017-10-18 20:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

city
檢舉此回應
To:誰是誰

1.假設Sub需要的屬性值 一定要是使用者提供的
2.這只是個假想的範例 所以故意用較誇裝的屬性數量

不過大大說的:
[就大部分的情形而言,一個不是對應資料的類別,如果會屬性太多,大概都是設計錯誤]
這個我覺得不錯
本篇文章回覆於2017-10-18 20:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

誰是誰
檢舉此回應
以這個範例,如果是我做 code review ,二話不說退回去重寫。
類別的設計基本就錯了,還有甚麼可說的呢?
本篇文章回覆於2017-10-18 20:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

city
檢舉此回應
還有個方法:

寫在Sub AA()的Byval裡面
不過就像寫在New一樣 Form1一樣要寫很多的Byval值
本篇文章回覆於2017-10-18 21:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

city
檢舉此回應
To:誰是誰

這的確是個爛Class 哈

不過就算只有10個變數 還是要面對兩個問題:

1.如何把這10個變數傳給Sub
2.如何讓使用者不會少輸入任何一個變數
本篇文章回覆於2017-10-18 21:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
最有價值解答

誰是誰
檢舉此回應
情境不完整的狀況,很難分析出正確的做法
(1) Class1 的作用是甚麼 ?
(2) 這 10 個參數彼此有沒有統合的可能性,若有,統合起來參數就會減少
(3) 即使這個 Class 要用到這 10 個參數, 難道 10 個參數會擠在同一個 method 中使用嗎 ?
(4) 如果排除各種可能,只能硬傳 10 個參數,而且要在編譯時期就能夠抓出問題,那除了用建構式,大概沒甚麼別的方法。

本篇文章回覆於2017-10-19 00:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
不錯的參考

小魚
檢舉此回應
1.兩種方法都可以,不過一般來說就算沒有輸入,也會在建構子的地方先給每個變數一個預設值
2.輸入完先判斷資料有沒有漏掉,沒有漏掉再接下去處理
本篇文章回覆於2017-10-19 00:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
作者回應

city
檢舉此回應
大概了解各位大大們的意思了

感謝各位大大們的建議 ^^
本篇文章回覆於2017-10-19 20:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.