深入淺出 應用服務

2021-10-06 18:12:20 字數 3427 閱讀 8922

應用服務實現應用程式的用例,將領域層邏輯公開給表示層。

從表示層(可選)呼叫應用服務,dto (資料傳物件)作為引數. 返回(可選)dto給表示層。

假設你有乙個book實體(聚合根), 如下所示:

public class book : aggregateroot

public virtual booktype type

public virtual float? price

protected book()

public book(guid id, [notnull] string name, booktype type, float? price = 0)

public virtual void changename([notnull] string name)

private static string checkname(string name)

if (name.length > maxnamelength)

chars!");

}return name;

}}

abp不會強制開發者這樣設計實體, 可以將所有的屬性設定public set/get. 由你來決定是否全面實施ddd。

我們將實現create方法作為示例. createbookdto定義如下:

public class createbookdto

public booktype type

public float? price

}

有關dto更的教程,請參見資料傳輸物件文件

public async task createasync(createbookdto input)

} createasync使用book實體的建構函式從給定的input值建立新的book物件。

應用服務使用並返回dto而不是實體. abp不會強制執行此規則. 但是將實體暴露給表示層(或遠端客戶端)存在重大問題, 所以不建議返回實體。

有關更多資訊, 請參見dto文件。

createbook方法使用引數createbookdto物件手動建立book實體. 因為book實體的建構函式強制執行(我們是這樣設計的)。

但是在很多情況下使用自動物件對映從相似物件設定物件的屬性更加方便實用. abp提供了乙個物件到物件對映基礎設施,使其變得更加容易。

bookdto是乙個簡單的dto類, 定義如下:

public class bookdto

public string name

public booktype type

public float? price

}

public class myprofile : profile

}

public class mymodule : abpmodule

); }}

然後你可以實現getasync方法. 如下所示:

public async taskgetasync(guid id)

mapto擴充套件方法通過複製具有相同命名的所有屬性將book物件轉換為bookdto物件。

public async taskgetasync(guid id)

雖然第二種語法編寫起來有點困難,但是如果你編寫單元測試,它會更好地工作. 有關更多資訊,請參閱物件到物件對映文件.

自動驗證應用服務方法的輸入(如asp.net core 控制器的actions). 你可以使用標準資料注釋屬性或自定義驗證方法來執行驗證. abp還確保輸入不為空。

可以對應用程式服務方法使用宣告性和命令式授權。

示例: bookdto, //used to show books

guid, //primary key of the book entity

pagedandsortedresultrequestdto, //used for paging/sorting on getting a list of books

createupdatebookdto, //used to create a new book

createupdatebookdto> //used to update a book

為應用程式服務建立乙個介面是最佳做法,但是abp框架並不強制你這麼做,你可以跳過介面部分。

tentitydto,

in tkey,

in tgetlistinput,

in tcreateinput,

in tupdateinput>

where tentitydto : ientitydto

示例中使用的dto類是bookdtocreateupdatebookdto:

public class bookdto : auditedentitydto

public booktype type

public float price

}public class createupdatebookdto

[required]

public booktype type = booktype.undefined;

[required]

public float price

}

public class myprofile : profile

}

createupdatebookdto, createupdatebookdto>,}

: base(repository)

protected override async task deletebyidasync(districtkey id)

protected override async taskgetentitybyidasync(districtkey id)

} 這個實現需要你建立乙個類做為復合鍵:

public class districtkey

public string name

}

應用服務的生命週期是transient的,它們會自動註冊到依賴注入系統。

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...

深入淺出ShellExecute

深入淺出shellexecute譯者 徐景周 原作 nishant s q 如何開啟乙個應用程式?shellexecute this m hwnd,open calc.exe sw show 或shellexecute this m hwnd,open notepad.exe c mylog.log...