Concevoir en C # à travers les yeux d'un étudiant de première année -NotePad ++ # 6

Bonjour à tous, je m'appelle Arkady, je suis étudiant à la Higher School of Economics, et dans cet article nous parlerons de la tâche PeerReview # 6 NotePad ++, à savoir des architectures adaptées à cette tâche et de certains modèles.





La tâche

Dans cette mission, la tâche principale consiste à implémenter une application GUI. Je propose de ne pas m'éloigner du sujet et de regarder immédiatement ce qu'est l'architecture et comment elle peut nous aider dans ce cas.





Les informations de cet article ne couvrent pas toutes les architectures et modèles existants, mais sont tout à fait suffisantes pour la mise en œuvre de la tâche # 6





Architectures d'application

Par architecture, nous entendons un modèle de conception architecturale qui couvre l'ensemble de l'application ou une partie de celle-ci. Cette partie est souvent appelée module. L'application est construite à partir de ces modules. Les modules dans ce cas ne sont pas des   modules C # , mais des modules architecturaux. Il peut s'agir, par exemple, d'un seul écran d'application ou de plusieurs écrans associés.





. -, , . -, - , . , . . .





, ,





1. Apple MVC

, – MVC. , . Apple MVC,   Classic MVC





Modèle de conception Apple MVC
Apple MVC

, – . . .





  • M – Model. , , . UI (user interface). , . ,





  • V – View. – . , . – , Controller. #- Form . .





  • C – Controller. . , View, , . .. , , .





. , . , TabBarController . .





MVC – .  ( ).  MVC Apple. ViewController View. - . , . 





ViewController . , View. . «Massive View Controller»





, – . - , ViewController, .





2. MVP

MVC MVP. ViewController – , - , View, Presenter.





Modèle de conception MVP
MVP

MVC Apple. , , , ViewController Presenter.





, , MVC, . Presenter , , . , , .





3. MVVM

MVVM MVP. , ViewModel. . , . MVP, . , data binding ( ). , . .. , ViewModel, .





Modèle de conception MVVM
MVVM

MVVM MVP . ,





, . MVVM , .. View ViewModel. , .






. MVVM, .





. – .





– . , . , .





, . :





  1. (Singleton)





  2. Target-Action





  3. (Observer)





  4. (Command)





, .. , , .





Swift, .. - , - **** C#, **** *** *** ***** *** **** , . .





1. (Singleton)

- . ,     , .





, - .





. , .





– GPS-. , . GPS, . , , . -. LocationManager, GPS-.





class NetworkManager {
  private(set) static var sharedInstance: NetworkManager = {
    let manager = NetworkManager()
    // additional setup code 
     return manager
  }() 
  private init () {
  }
  func sendRequest() {
    print("sending request")
  }
}
// main program
let networkManager = NetworkManager.sharedInstance
networkManager.sendRequest() // sending request
      
      



2. Target-Action

, , Target-Action. , .. . , , . : - . , , Target-Action. Target-Action – , , , , . : , (action), , (target). , .





, – , , . . - .





WindowsForm ,





3.

«» . , , –  ( , ) . , «» - . «» . 





, - .





– , , - . «—». , «» (publisher) (subscribers). .





interface IObservable {
  void AddObserver(IObserver o);
  void RemoveObserver(IObserver o);
  void NotifyObservers();
 } 

class ConcreteObservable : IObservable {
  private List<IObserver> observers;
  public ConcreteObservable(){
    observers = new List<IObserver>();
  }
  public void AddObserver(IObserver o){
    observers.Add(o);
  }
  public void RemoveObserver(IObserver o){
    observers.Remove(o);
  }
  public void NotifyObservers(){
    foreach (IObserver observer in observers) 
      observer.Update();
  }
}
interface IObserver {
  void Update();
 }
 class ConcreteObserver :IObserver {
   public void Update() { 
     // Some Action
   } 
 }
      
      



( c#, .. ):





  • IObservable: . : AddObserver()



     ( ())RemoveObserver()



     ( )  NotifyObservers()



    ( )





  • ConcreteObservable: IObservable. .





  • IObserver: , .  Update()



    , .





  • ConcreteObserver: IObserver





,  Update()



. . .





. - .





— , , , , , ......





.. WindowsForms , ,





https://refactoring.guru/ru/design-patterns/command






:





https://refactoring.guru/ru/design-patterns/





, , , .





. -, .





, !








All Articles