日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

pro mvvm 读书笔记

發布時間:2025/3/20 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pro mvvm 读书笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、分離關注點

目的是確保每一個模塊值有單一的,明確的目的,不需要去負責其他的功能。單一的目的也稱為關注點。

1.1依賴

引用程序集對于依賴來說不是必須的。依賴關系可能也存在于一個代碼單元要知道另一個單元,如果是一個類需要使用另外一個類,那么前者就是依賴于后者,特別的依賴還存在于類的方法,屬性,以及構造器。強烈建議把類的接口和實現分開。

上面兩端代碼是實現同樣的目的,實現畫出一個形狀

/*唯一能畫出來的是一個圓,每次圖形改變時,有可能需要畫矩形,DrawShape必須改變,這樣增加了維護成本*還有個不足是,畫圓形是,我可以根據圓心和半徑畫,可能不想這樣畫,我想根據一段弧來畫,那么必須改變*畫內部的方法。 */public class ShapeRenderer{private IGraphicsContext _graphicsContext;public void DrawShape(Circle circleShape){_graphicsContext.DrawCircle(circleShape.Position, circleShape.Radius);}}//可以畫出多個形狀,只需要把形狀繼承Ishape接口,然后在畫的時候中傳入繪畫時的方法//就可以達到了控制反轉的效果了public class ShapeRenderer{private IGraphicsContext graphicsContext;public void DrawShape(IShape shape){shape.Draw(graphicsContext);}}

下面的方法比上面的方法更抽象一下,沒有第一種直觀,但是可以符合多種情況的使用。減少了維護的成本。以上的例子說明如果讓用戶操作看做最高層,各個對象看做最底層時,不應該讓高層依賴底層,應該讓高層的依賴于低層的代碼。

ViewModel主要從Model獲取他需要的數據,經過加工數據,然后實現View可以理解和使用的接口。View的改變完全和Model不相干的。因為Model的心里完全沒有View的概念。Model的改變對View影響也通過ViewModel變得很緩和了,因為ViewModel是直接為View所用的。

通常來講,Model是對立的,既不依賴與ViewModel,也不依賴與View

二、Model

Model不僅對于wpf或者silverlight程序是很有用的,對于其他應用程序也是很有用的。

2.1封裝

封裝就是用來隱藏信息,其最佳實踐目標是保持封裝,避免信息被肉眼看到。在代碼中,信息是由類及其公共方法屬性,字段,和構造器組成,這些數據有些事只讀的,有些是可寫的。如果在類中的數據可以直接的可以寫,這說明類存在潛在的問題。

封裝其實就是類內部的信息被其他對象訪問,但是類內部的實現,只有自己知道。

2.2不要欺騙自己

復制代碼是一種罪過,當如果重復的賦值代碼時,就應該改變代碼了。因為如果復制的代碼修改了,就要修改兩次或者多次。如果第二個沒有修改,就意味著bug的已經進入你的應用程序了。

三、ViewModel

public class SampleViewModel : INotifyPropertyChanged{/** 最常用的public元素放在最頂端和常用的字段放在最低端* 在此例子中ViewModel不負責計算的過程,而是通過Model來實現的* 屬性是View中要使用的* */#region Constructorspublic SampleViewModel(){_model = new SampleModel();}#endregion#region Properties//也是可讀寫的屬性,但是只有ViewModel可以Set//由于ViewModel變化時要通知View所以,會在值改變時//調用PropertyChanged事件public double Result{get { return _result; }private set{if(_result != value){_result = value;if (PropertyChanged != null){PropertyChanged(this, new PropertyChangedEventArgs("Result"));}}}}//可以讀寫的原因是我們要讓用戶來寫內容,從而使員我們的ViewModel來讀取public double Number{get;set;}public ICommand CalculateSquareRootCommand{get{if (_calculateSquareRootCommand == null){_calculateSquareRootCommand = new RelayCommand(param =>this.CalculateSquareRoot());}return _calculateSquareRootCommand;}}#endregion#region Methodsprivate void CalculateSquareRoot(){Result = _model.CalculateSquareRoot(Number);}#endregion#region Fieldspublic event PropertyChangedEventHandler PropertyChanged;private double _result;private RelayCommand _calculateSquareRootCommand;private SampleModel _model;#endregion}

總結

以上是生活随笔為你收集整理的pro mvvm 读书笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。