国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day12

這篇具有很好參考價值的文章主要介紹了Wpf 使用 Prism 實戰(zhàn)開發(fā)Day12。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

待辦事項接口增刪(CURD)改查實現(xiàn)

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day12,c#,數(shù)據(jù)庫

一.添加待辦事項控制器(ToDoController)

  1. 控制器類需要繼承?ControllerBase 基類
  2. 需要添加 [ApiController]?特性以及 [Route]?特性
  3. Route(路由) 特性參數(shù)規(guī)則,一般寫法是?[Route("api/[controller]/[action]")] 。也就是路由訪問路徑:前綴api/當(dāng)前控制器/具體的方法

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day12,c#,數(shù)據(jù)庫


?二.封裝服務(wù)共用類以及ToDoController 控制器邏輯實現(xiàn)

  • 為了業(yè)務(wù)處理邏輯和控制器之間實現(xiàn)解耦??梢酝ㄟ^設(shè)計:1.通用接口狀態(tài)返回值類,2.共用(CURD)基礎(chǔ)接口類,3.以及各自業(yè)務(wù)邏輯處理服務(wù)類。
  • 通用接口狀態(tài)返回值類提供給共用基礎(chǔ)接口類使用。共用基礎(chǔ)接口類提供給不同的業(yè)務(wù)處理服務(wù)類使用。然后不同服務(wù)類提供給不同控制器進行訪問使用。這樣就能實現(xiàn)服務(wù)與控制器的之間解耦。

1.創(chuàng)建通用接口狀態(tài)返回值(ApiResponse)類?

  • ApiResponse 類的構(gòu)造函數(shù)用來構(gòu)造返回,成功或失敗的結(jié)果
 public class ApiResponse
 {
     /// <summary>
     /// 失敗
     /// </summary>
     /// <param name="message"></param>
     /// <param name="status"></param>
     public ApiResponse(string message, bool status = false)
     { 
         this.Message = message;
         this.Status = status;
     }
     /// <summary>
     /// 成功
     /// </summary>
     /// <param name="status"></param>
     /// <param name="result"></param>
     public ApiResponse(bool status,object result) 
     {
       this.Status = status;
       this.Result = result;
     }
     /// <summary>
     /// 返回消息
     /// </summary>
     public string Message { get; set; }

     /// <summary>
     /// 返回狀態(tài)
     /// </summary>
     public bool Status { get; set; }

     /// <summary>
     /// 結(jié)果
     /// </summary>
     public object Result { get; set; }
 }

2.創(chuàng)建一個共用的基礎(chǔ)接口 增刪改查(CURD) IBaseService 基類。

  • IBaseService 基類,設(shè)計傳入一個泛型 T
  • 設(shè)計的是異步實現(xiàn),定義的方法需按照規(guī)范,后綴添加Async
    public interface IBaseService<T>
    {
        /// <summary>
        /// 獲取全部數(shù)據(jù)
        /// </summary>
        /// <returns></returns>
        Task<ApiResponse> GetAllAsync();
        /// <summary>
        /// 根據(jù)id,獲取單條數(shù)據(jù)
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<ApiResponse> GetSingleAsync(int id);
        /// <summary>
        /// 添加數(shù)據(jù),傳入T泛型實體
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        Task<ApiResponse> AddAsync(T model);
        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        Task<ApiResponse> UpdateAsync(T model);
        /// <summary>
        /// 刪除,根據(jù)id進行刪除
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        Task<ApiResponse> DeleteAsync(int id);
    }

3.創(chuàng)建待辦事項接口服務(wù)類(IToDoService),繼承自共用的 IBaseService 接口類

  • 當(dāng)前待辦事項接口服務(wù)類(IToDoService),繼承了IBaseService 基類后,需要傳入泛型實體(待辦事項實體)?ToDo
  • 如果是忘備錄接口服務(wù)類,就需要傳入?Memo 實體了,也就是不同的實現(xiàn),需傳入不同的泛型實體,實現(xiàn)不同的邏輯。
    public interface IToDoService:IBaseService<ToDo>
    {

    }

4.接著,創(chuàng)建待辦事項服務(wù)實現(xiàn)類(ToDoService),實現(xiàn)基類定義的方法邏輯。

/// <summary>
/// 待辦事項的實現(xiàn)
/// </summary>
public class ToDoService : IToDoService
{
    private readonly IUnitOfWork work;

    public ToDoService(IUnitOfWork work)
    {
        this.work = work;
    }
    public async Task<ApiResponse> AddAsync(ToDo model)
    {
        try
        {
            await work.GetRepository<ToDo>().InsertAsync(model);
            if (await work.SaveChangesAsync() > 0) //保存成功
            {
                return new ApiResponse(true, model); //返回true,并把添加的實體返回
            }
            return new ApiResponse("添加數(shù)據(jù)失敗");
        }
        catch (Exception ex)
        {
            return new ApiResponse(ex.Message);
        }
    }

    public async Task<ApiResponse> DeleteAsync(int id)
    {
        try
        {
            var repository= work.GetRepository<ToDo>();//獲取倉儲
            //刪除之前,先進行查詢
            var todo = await repository.GetFirstOrDefaultAsync(predicate:x=>x.Id.Equals(id));
            repository.Delete(todo);
            if (await work.SaveChangesAsync() > 0) //刪除成功
            {
                return new ApiResponse(true, "刪除成功"); 
            }
            return new ApiResponse("刪除數(shù)據(jù)失敗");
        }
        catch (Exception ex)
        {
            return new ApiResponse(ex.Message);
        }
    }

    public async Task<ApiResponse> GetAllAsync()
    {
        try
        {
           var todos= await work.GetRepository<ToDo>().GetAllAsync();
            return new ApiResponse(true, todos); //返回true,并返回所有數(shù)據(jù)
        }
        catch (Exception ex)
        {
            return new ApiResponse(ex.Message);
        }
    }

    public async Task<ApiResponse> GetSingleAsync(int id)
    {
        try
        {
           var todo= await work.GetRepository<ToDo>().GetFirstOrDefaultAsync(predicate: x => x.Id.Equals(id));
            return new ApiResponse(true, todo); //把找到的數(shù)據(jù)返回
        }
        catch (Exception ex)
        {
            return new ApiResponse(ex.Message);
        }
    }

    public async Task<ApiResponse> UpdateAsync(ToDo model)
    {
        try
        {
            var repository = work.GetRepository<ToDo>();//獲取倉儲
            //更新之前,先拿到要更新的數(shù)據(jù)
            var todo = await repository.GetFirstOrDefaultAsync(predicate: x => x.Id.Equals(model.Id));
            todo.Title = model.Title;
            todo.Content = model.Content;
            todo.Status = model.Status;
            todo.UpdateDate = DateTime.Now;
            repository.Update(todo);
            if (await work.SaveChangesAsync() > 0) //更新成功
            {
                return new ApiResponse(true, "更新成功");
            }
            return new ApiResponse("更新數(shù)據(jù)失敗");
        }
        catch (Exception ex)
        {
            return new ApiResponse(ex.Message);
        }
    }
}

5.完成上述步驟后,還需要在Program.cs 中進行依賴注入。

AddTransient 是生命周期函數(shù),還有AddScoped,AddSingleton 等三種生命周期。

builder.Services.AddTransient<IToDoService,ToDoService>();

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day12,c#,數(shù)據(jù)庫


6.最后在 ToDoController 控制器構(gòu)造函數(shù)中,注入?IToDoService 服務(wù)進行使用。

[FromBody] 是用于從Http請求的正文中 提取數(shù)據(jù)的屬性。當(dāng)在接口方法的參數(shù)前加上該標(biāo)記時,web api 框架就會從http請求的正文中,提取請求的json數(shù)據(jù)并將其綁定到對應(yīng)的參數(shù)上面。文章來源地址http://www.zghlxwxcb.cn/news/detail-793159.html

    [ApiController]
    [Route("api/[controller]/[action]")]
    public class ToDoController:ControllerBase
    {
        private readonly IToDoService service;

        public ToDoController(IToDoService service)
        {
            this.service = service;
        }

        [HttpGet]
        public async Task<ApiResponse> Get(int id)=> await service.GetSingleAsync(id);

        [HttpGet]
        public async Task<ApiResponse> GetAll() => await service.GetAllAsync();

        [HttpPost]
        public async Task<ApiResponse> Add([FromBody]ToDo model) => await service.AddAsync(model);

        [HttpPost]
        public async Task<ApiResponse> Update([FromBody] ToDo model) => await service.UpdateAsync(model);

        [HttpDelete]
        public async Task<ApiResponse> Delete(int id) => await service.DeleteAsync(id);
    }

到了這里,關(guān)于Wpf 使用 Prism 實戰(zhàn)開發(fā)Day12的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Wpf 使用 Prism 實戰(zhàn)開發(fā)Day10

    Wpf 使用 Prism 實戰(zhàn)開發(fā)Day10

    1-9章節(jié)已經(jīng)把基本功能都做好了,但頁面的數(shù)據(jù)是后臺模擬生成的靜態(tài)數(shù)據(jù)。接下來所有章節(jié)就是實現(xiàn),頁面的所有數(shù)據(jù)都是從數(shù)據(jù)庫中獲取,并且實現(xiàn)頁面數(shù)據(jù)的持久化以及增刪改查。 使用Sqlite 做為數(shù)據(jù)庫? 1.打開 MyToDo.Api項目,右鍵=》選擇 管理NuGet 程序包?,進行下載安

    2024年01月25日
    瀏覽(21)
  • Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11

    Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11

    ?倉儲(rep):倉儲接口定義了對實體類訪問數(shù)據(jù)庫及操作的方法。它統(tǒng)一管理數(shù)據(jù)訪問的邏輯,并與業(yè)務(wù)邏輯層進行解耦。 簡單的理解就是對訪問數(shù)據(jù)庫的一層接口封裝。 工作單元(uow):用來保證我們處理業(yè)務(wù)邏輯的,穩(wěn)定性,完整性。防止在業(yè)務(wù)操作過程中,涉及對數(shù)據(jù)

    2024年02月02日
    瀏覽(31)
  • Wpf 使用 Prism 實戰(zhàn)開發(fā)Day08

    Wpf 使用 Prism 實戰(zhàn)開發(fā)Day08

    1.效果圖 MemoView.xaml 頁面代碼 ? ? ?1. 在? ItemsControl 中,添加滾動條? ScrollViewer ?這樣使用 ScrollViewer 把內(nèi)容區(qū)域包裹起來,就能讓內(nèi)容區(qū)域支持滾動了 ? ? ?? 2 . 添加滾動條后的效果圖如下:? 使用md 中的一個自帶動畫 md:TransitioningContent 來實現(xiàn)該功能? 需要設(shè)置一個屬性,

    2024年02月03日
    瀏覽(20)
  • Wpf 使用 Prism 實戰(zhàn)開發(fā)Day03

    Wpf 使用 Prism 實戰(zhàn)開發(fā)Day03

    效果圖: ? 創(chuàng)建 Models ,放置實體類。 實體類需要繼承自 Prism 框架的? BindableBase ,目的是讓實體類支持?jǐn)?shù)據(jù)的動態(tài)變更! ?例如: 系統(tǒng)導(dǎo)航菜單實體類 創(chuàng)建View文件夾? 放置前端顯示頁面 。例如:創(chuàng)建首頁: MainView.xaml 創(chuàng)建ViewModel 文件夾,放置前端邏輯處理類。意思是:有前端

    2024年02月08日
    瀏覽(23)
  • Wpf 使用 Prism 實戰(zhàn)開發(fā)Day19

    Wpf 使用 Prism 實戰(zhàn)開發(fā)Day19

    由于待辦事項功能頁,數(shù)據(jù)已正常渲染出來了。但頁面新增,查詢,修改,刪除等功能還未實現(xiàn)。本章節(jié)來實現(xiàn)頁面的請求后臺實現(xiàn)CURD(增刪改查) 根據(jù)渲染出來的待辦事項,點擊對應(yīng)的待辦事項時,查找出該條數(shù)據(jù),顯展示在編輯窗口中。 同時在搜索框中輸入的參數(shù)或選

    2024年04月23日
    瀏覽(26)
  • 【100天精通python】Day32:使用python操作數(shù)據(jù)庫_MySQL下載、安裝、配置、使用實戰(zhàn)

    目錄 ?專欄導(dǎo)讀? 1 MySQL概述 2 MySQL下載安裝 2.1 下載 ?2.2 安裝 2.3 配置

    2024年02月12日
    瀏覽(17)
  • WPF實戰(zhàn)學(xué)習(xí)筆記08-創(chuàng)建數(shù)據(jù)庫

    創(chuàng)建文件夾 ./Context 創(chuàng)建文件 ./Context/BaseEnity.cs ./Context/Memo.cs ./Context/MyTodoContext.cs ./Context/Todo.cs ./Context/User.cs 創(chuàng)建數(shù)據(jù)對象 ./Context/BaseEnity.cs ./Context/Memo.cs ./Context/MyTodoContext.cs 創(chuàng)建數(shù)據(jù)庫DbSet ./Context/Todo.cs ./Context/User.cs 添加nuget包 Microsoft.EntityFrameworkCore.Design Shared design-time co

    2024年02月16日
    瀏覽(46)
  • 【100天精通python】Day44:python網(wǎng)絡(luò)爬蟲開發(fā)_爬蟲基礎(chǔ)(爬蟲數(shù)據(jù)存儲:基本文件存儲,MySQL,NoSQL:MongDB,Redis 數(shù)據(jù)庫存儲+實戰(zhàn)代碼)

    目錄 1 數(shù)據(jù)存儲 1.1 爬蟲存儲:基本文件存儲 1.2 爬蟲存儲:使用MySQL 數(shù)據(jù)庫 1.3 爬蟲 NoSQL 數(shù)據(jù)庫使用 1.3.1 MongoDB 簡介

    2024年02月11日
    瀏覽(24)
  • Django Web開發(fā)(day4)——數(shù)據(jù)模型使用與填充網(wǎng)站數(shù)據(jù)(對數(shù)據(jù)庫的基本操作)

    Django Web開發(fā)(day4)——數(shù)據(jù)模型使用與填充網(wǎng)站數(shù)據(jù)(對數(shù)據(jù)庫的基本操作)

    本博客將會涉及:? Django 數(shù)據(jù)模型的使用 視頻數(shù)據(jù)的導(dǎo)入 admin 后臺的使用? 1、Django 數(shù)據(jù)模型的使用? 在上一篇中完成了網(wǎng)站的數(shù)據(jù)模型的創(chuàng)建,在數(shù)據(jù)模型創(chuàng)建之后, Django 會為我們的數(shù)據(jù)模型創(chuàng)建一套數(shù)據(jù)庫抽象的 API 接口,以供我們進行檢索數(shù)據(jù)、創(chuàng)建數(shù)據(jù)、更新和修

    2024年01月18日
    瀏覽(36)
  • Android Studio App開發(fā)中數(shù)據(jù)庫SQLite的解析及實戰(zhàn)使用(包括創(chuàng)建數(shù)據(jù)庫,增刪改查,記住密碼等 附源碼必看)

    Android Studio App開發(fā)中數(shù)據(jù)庫SQLite的解析及實戰(zhàn)使用(包括創(chuàng)建數(shù)據(jù)庫,增刪改查,記住密碼等 附源碼必看)

    運行有問題或需要源碼請點贊關(guān)注收藏后評論區(qū)留言~~~ SQLite是一種小巧的嵌入式數(shù)據(jù)庫,使用方便,開發(fā)簡單,如同mysql,oracle那樣,SQLite也采用SQL語句管理數(shù)據(jù),由于它屬于輕型數(shù)據(jù)庫,不涉及復(fù)雜的數(shù)據(jù)控制操作,因此App開發(fā)只用到數(shù)據(jù)定義和數(shù)據(jù)操縱兩類SQL。 1:數(shù)據(jù)

    2024年02月03日
    瀏覽(130)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包