第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 Java 中放置 Comprobations 的位置?

在 Java 中放置 Comprobations 的位置?

慕桂英3389331 2021-12-22 16:04:11
在創(chuàng)建必須驗(yàn)證條件的對(duì)象時(shí),我一遍又一遍地提出了這個(gè)問題。檢查應(yīng)該在嘗試創(chuàng)建對(duì)象之前還是在對(duì)象本身的構(gòu)造函數(shù)中進(jìn)行?為了更好地說明它,這里有一個(gè)例子:假設(shè)我們有一個(gè)學(xué)生經(jīng)理,一位教授,他將學(xué)生對(duì)象添加到他們的列表中。創(chuàng)建新的學(xué)生對(duì)象時(shí),我們必須檢查他的名字是否最多 20 個(gè)字符。class Professor{    LinkedList<Student> studentsList;    Professor(){        studentsList = new LinkedList<Student>();    }    public Student addStudent(String studentName){        // Place 1        if (studentName.length <= 20)            studentList.add(new Student(studentName));        else             // Do another thing    }}class Student {    String name;    Student(String studentName){        // Place 2        if (studentName.length <= 20)            name = studentName);        else            // Don't create the object and throw exception     }}所以基本上我的問題是,在嘗試創(chuàng)建學(xué)生之前,應(yīng)該在“地點(diǎn) 1”中進(jìn)行檢查,還是在學(xué)生的構(gòu)造函數(shù)中的“地點(diǎn) 2”中進(jìn)行檢查。
查看完整描述

2 回答

?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊

對(duì)象為自己負(fù)責(zé)

通常在面向?qū)ο缶幊?(OOP) 中,我們希望對(duì)象對(duì)自己負(fù)責(zé)。應(yīng)該在內(nèi)部處理有關(guān)其內(nèi)部狀態(tài)完整性的業(yè)務(wù)規(guī)則(或委托給構(gòu)建者——見下文)。這個(gè)想法是 OOP 中正式稱為封裝的一部分。


所以在你的例子中,Professor班級(jí)不應(yīng)該擔(dān)心Student班級(jí)的規(guī)則,比如學(xué)生姓名的長(zhǎng)度。該Student級(jí)應(yīng)執(zhí)行其自身的完整性。我們希望這些完整性規(guī)則的邏輯位于一個(gè)地方,而不是分散在整個(gè)應(yīng)用程序中。


事實(shí)上,Professor類不應(yīng)該實(shí)例化Student對(duì)象。在您的示例中暗示,必須有其他方將學(xué)生分配給教授。也許是一個(gè)Tutorial負(fù)責(zé)跟蹤由教授監(jiān)督的幾個(gè)學(xué)生的作業(yè)和進(jìn)度的對(duì)象。這Tutorial應(yīng)該是實(shí)例化Student對(duì)象,或者傳遞Student從其他來源(例如數(shù)據(jù)庫(kù)服務(wù)對(duì)象)接收的對(duì)象。


當(dāng)Student對(duì)象到達(dá) 時(shí)Professor,它們應(yīng)該是有效的。本Professor類不應(yīng)該是什么讓一個(gè)被關(guān)注Student的有效與否。該P(yáng)rofessor只應(yīng)是什么讓一個(gè)有關(guān)Professor有效。


class Professor{

    List< Student > students;

    …

    public void addStudent( Student student ){

        Objects.requireNonNull( student , "Received NULL rather than a Student object. Message # 68a0ff63-8379-4e4c-850f-e4e06bd8378a." ) ;  // Throw an exception if passed a null object.

        Objects.requireNonNull( this.students , "Collection of Student objects is NULL. Message # c22d7b22-b450-4122-a4d6-61f92129569a." ) ;  // Throw an exception if the `students` list is not established.

        this.students.add( student ) ;

    }

}

除了對(duì)象對(duì)自己負(fù)責(zé)的想法之外Professor,不實(shí)例化Student對(duì)象的另一個(gè)原因是方便測(cè)試。如果Student對(duì)象來自某個(gè)其他來源,則該來源可以使用尚未完成、禁用某些功能(例如數(shù)據(jù)庫(kù)訪問)或被設(shè)計(jì)用于測(cè)試場(chǎng)景的虛假數(shù)據(jù)替代的類或接口提供虛假對(duì)象Student。


建造者模式

如果您有多個(gè)需要驗(yàn)證才能實(shí)例化新對(duì)象的屬性,您可能需要使用Builder 模式。您定義了一個(gè)額外的類,例如,StudentBuilder它具有為學(xué)生所需的每個(gè)部分的方法。


通常,這些方法都返回相同的StudentBuilder對(duì)象以方便調(diào)用鏈。


不同的人對(duì)建筑商有不同的風(fēng)格。一種方法是提供一種有效性檢查方法,或者一種提供阻止構(gòu)建所需對(duì)象的問題列表的方法。


有些人使用 likewith而不是 accessor 方法set來表明,雖然我們暫時(shí)在構(gòu)建器上設(shè)置一個(gè)屬性,但真正的意圖是在另一個(gè)類的對(duì)象上設(shè)置一個(gè)屬性。


StudentBuilder sb = new StudentBuilder().withFirstName( "Alice" ).withLastName( "Coleman" ).withEmail( "x@y.com" );

if( sb.isValid() ) {

    Student s = sb.build() ;

    …

}


查看完整回答
反對(duì) 回復(fù) 2021-12-22
?
動(dòng)漫人物

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個(gè)贊

在簡(jiǎn)單的程序中,沒有太大關(guān)系。在復(fù)雜的應(yīng)用中,有許多因素決定了這一點(diǎn):

  • 在某些情況下,具有無效值的對(duì)象是否仍然存在?(即使它們包含無效值,它們是否有意義?)

  • 驗(yàn)證很貴嗎?(是否需要計(jì)算、網(wǎng)絡(luò)連接或數(shù)據(jù)庫(kù)操作?)

  • 可以驗(yàn)證嗎?(我們是否已經(jīng)擁有驗(yàn)證所需的所有信息?)

  • 驗(yàn)證是否有自己的階段,在這個(gè)階段與其他對(duì)象一起驗(yàn)證或針對(duì)其他對(duì)象進(jìn)行驗(yàn)證?

  • 是否有現(xiàn)有的約定或要求?

等等...

因此,大多數(shù)情況下,這將由架構(gòu)或設(shè)計(jì)約束或與更大應(yīng)用程序相關(guān)的其他因素決定。在非常小的程序中,您可能找不到任何決定驗(yàn)證最佳位置的因素。

在上面顯示的示例對(duì)象創(chuàng)建代碼中,您通常不會(huì)默默地跳過超過 20 個(gè)字符的值,但在這種情況下通常會(huì)拋出異常。如果這是數(shù)據(jù)處理而不是有意過濾短于 20 個(gè)字符的記錄,您不想默默地忽略不合適的記錄。(想象一下,誰(shuí)會(huì)手動(dòng)檢查為什么在 1000 條記錄的集合中,有 5 條記錄丟失了,并且沒有錯(cuò)誤消息表明出了什么問題。所以你可能會(huì)看到,上述方法無論如何都沒有實(shí)際使用。)


查看完整回答
反對(duì) 回復(fù) 2021-12-22
  • 2 回答
  • 0 關(guān)注
  • 165 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)