我正在研究一個相對較大的項目,我們試圖在可能的情況下暗示面向服務的體系結構,但由於今天的這一事實,我遇到了以下問題。 在我的表現層(ASP.NET Web Forms
)我有一個User
對象:將強類型對象轉換爲匿名類型
public class User
{
public int ID {get; set;}
public string Name {get; set;}
public string Email {get; set;}
Public string State {get; set;}
public DateTime CreatedOn {get; set;}
public string CreatedBy {get; set;}
}
有在原來的項目多一些字段,但這種情況下,我認爲這並不重要。 所以在表示層我使用這個對象來顯示頁面上的用戶信息,並讓使用該應用程序的人員執行CRUD操作。 問題是我想創建一個新用戶。有獨立的Web Api 2
服務項目爲 - 「UserService so all calls are made to the dedicated action from the
UserService新創建的用戶的project and the response is the
ID`,它是在他被創建初始狀態 所以要創建新的用戶我做這樣的事情:
public User InsertUser(string username, string email, string createdBy)
{
var user = new
{
Username = username,
Email = email,
CreatedBy = createdBy
}
var result = //make call to the user service passing the anonymous object
user newUser = new User
{
ID = result.ID,
Username = username,
Email = email,
CreatedBy = createdBy,
State = result.State
}
return newUser;
}
。
由於某些原因,在不久的將來我不能解決,我不能引用一些DTO
對象,並且該服務期望是來自同一類型的對象或匿名的對象,或者它不能反序列化數據。這裏有兩件事讓我感到困擾 - 第一件事是我創建了兩次實例,理想情況下它應該只是User
類型的一個對象,在執行完s之後ervice我可以添加ID
和State
像這樣:
newUser.Id = result.Id
newUser.State = result.State
相反,我創建了兩個obejcts這是遠遠理想。其次,我認爲可能的一件事是從表示層創建User
的一個實例,但以某種方式轉換它,以便服務操作能夠對其進行反序列化。此外,這似乎是相當標準的情況,不包括我不能引用.dll
或其他東西..但是,也許有另一種解決方案,我不知道這個問題?
編輯 在Web Api
部分的方法是這樣的:
public HttpResponseMessage InsertUser([FromBody]UserDTO userToInsert)
{
var user = userToInsert;
//Call Stored Procedure to Insert the user
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, new {UserId = user.Id, State = user.State});
return response;
}
,並在我的客戶,我把這種方法只是爲了讓起見,工作,我有一個嵌套類:
public class UserDetails
{
public int UserId {get; set;}
public string State {get; set;}
}
什麼是服務方法的簽名?當你談論引用DLL時,我不確定我是否理解你。你的意思是你不能在你的項目中包含第三方庫嗎? –
我有'ServiceContracts'項目通常用於解決這類問題。但是這種特殊情況是非常特殊的,我不能參考這個項目,所以我需要爲這個特定情況尋找解決方法。爲這種情況創建一個全新的項目是不值得的。最後我可以堅持我現在所擁有的,但我真的不想。 – Leron
你真的沒有回答我的問題:)我問服務方法的簽名。例如'User CreateUser(object info)'。我的另一個問題是,你可以參考一些第三方庫,比如AutoMapper嗎? –