<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      實現領域驅動設計 - 使用ABP框架 - 更新操作實體

      用例演示 - 更新 / 操作實體

      一旦一個實體被創建,它將被用例更新/操作,直到它從系統中刪除。可以有不同類型的用例直接或間接地更改實體

      在本節中,我們將討論更改 Issue 的多個屬性的典型更新操作。

      這次,從更新DTO開始:

      public class UpdateIssueDto
      {
          [Required]
          public string Title { get; set; }
          public string Text { get; set; }
          public Guid? AssignedUserId { get; set; }
      }
      

      通過與 IssueCreationDto 比較,您看不到 RepositoryId 。因為,我們的系統不允許跨倉庫移動問題(想想GitHub倉庫)。只有 Title 是必需的,其他屬性是可選的

      讓我們看看 IssueAppService 中的 Update 實現:

      public class IssueAppService : ApplicationService, IIssueAppService
      {
          //省略了依賴注入
      
          public async Task<IssueDto> UpdateAsync(Guid id, UpdateIssueDto input)
          {
              //從數據庫獲取問題實體
              var issue = await _issueRepository.GetAsync(id);
      
              //修改標題
              await _issueManager.ChangeTitleAsync(issue, input.Title);
      
              //修改分配人
              if(input.AssignedUserId.HasValue)
              {
                  var user = await _userRepository.GetAsync(input.AssignedUserId.Value);
                  await _issueManager.AssignToAsync(issue, user);
              }
      
              //修改內容 (沒有業務規則,接受任何內容)
              issue.Text = input.Text;
      
              // 更新實體到數據庫
              await _issueRepository.UpdateAsync(issue);
      
              //返回表示這個新的問題的DTO
              return ObjectMapper.Map<Issue, IssueDto>(issue);
          }
      }
      
      • UpdateAsync 方法把 id 作為一個單獨的參數。它不包含在UpdateIssueDto 中。這是一個設計決策,可以幫助ABP將此服務 自動暴露 為 HTTP API 端點路由。所以,這和DDD無關

      • 首先從數據庫中獲取 Issue 實體。

      • 使用 IssueManagerChangeTitleAsync ,而不是直接調用 Issue.SetTitle(…) 因為我們需要實現重復的 Title 檢查,就像剛才在實體創建中所做的那樣。這需要對 Issue 和 IssueManager 類進行一些更改(將在下面解釋)。

      • 使用 IssueManagerAssignToAsync 方法,如果分配的用戶在這個請求中被更改

      • 直接設置 Issue.Text ,因為沒有相關的業務規則。如果以后需要,我們總是可以進行重構

      • 將更改保存到數據庫。同樣,保存實體是協調業務對象和事務的應用程序服務的職責。如果 IssueManagerChangeTitleAsyncAssignToAsync 方法內部保存,將會有雙數據庫操作 參見討論:為什么問題不在IssueManager中保存到數據庫?

      • 最后使用 IObjectMapper 返回一個 IssueDto ,該 IssueDto 是通過映射從更新的 Issue 實體自動創建的

      如前所述,我們需要對 IssueIssueManager 類進行一些更改。

      首先,在 Issue 類中設置 SetTitle 為 internal:

      internal void SetTitle(string title)
      {
           Title = Check.NotNullOrWhiteSpace(title, nameof(title));
      }
      

      然后在 IssueManager 中添加了一個新方法來更改標題:

      public async Task ChangeTitleAsync(Issue issue, string title)
      {
          if(issue.Title == title)
          {
              return;
          }
      
          //如果存在相同標題的問題,直接拋錯
          if(await _issueRepository.AnyAsync(i => i.Title == title))
          {
              throw new BusinessException("IssueTracking:IssueWithSameTitleExists");
          }
      
          issue.SetTitle(title);
      }
      
      posted @ 2022-06-24 10:53  Broadm  閱讀(303)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久精品无码免费不卡| 又湿又紧又大又爽A视频男| 7878成人国产在线观看| 亚洲丶国产丶欧美一区二区三区| 国产精品中文字幕在线看| 一道本AV免费不卡播放| 精品精品亚洲高清a毛片| 亚洲精品日韩久久精品| 最新精品国偷自产在线| 久久久av男人的天堂| 熟妇人妻久久精品一区二区| 豆国产97在线 | 亚洲| 四虎国产精品永久地址99| 双乳奶水饱满少妇呻吟免费看| 免费人成视频在线观看不卡| 日韩高清免费一码二码三码 | 国产无遮挡又黄又爽不要vip软件| 国产微拍一区二区三区四区| 好吊视频一区二区三区人妖| 亚洲午夜精品久久久久久抢| 国产精品自拍自在线播放| 国产福利深夜在线播放| 精品国产乱码久久久久夜深人妻| 亚洲一区二区三区黄色片| 亚洲欧美日韩成人综合一区| 日本中文字幕有码在线视频| 人妻少妇久久中文字幕| 国产精品香蕉在线观看不卡 | 亚洲欧美自偷自拍视频图片| 日韩幕无线码一区中文| 绵阳市| 成人国产乱对白在线观看| 日韩A人毛片精品无人区乱码 | 欧美亚洲另类自拍偷在线拍| 麻豆国产97在线 | 欧美| 无码专区 人妻系列 在线| 精品无码久久久久久尤物| 国产丝袜肉丝视频在线| 乱妇乱女熟妇熟女网站| 99久久激情国产精品| 亚洲无人区码二码三码区|