Diseñar en C # a través de los ojos de un novato -NotePad ++ # 6

Hola a todos, mi nombre es Arkady, soy estudiante de la Escuela Superior de Economía, y en este artículo hablaremos sobre la tarea PeerReview # 6 NotePad ++, es decir sobre arquitecturas que son adecuadas para esta tarea y algunos patrones.





La tarea

En esta tarea, la tarea principal es implementar una aplicación GUI. Propongo no desviarnos mucho del tema y mirar de inmediato qué es la arquitectura y cómo pueden ayudarnos en este caso.





La información de esta publicación no cubre todas las arquitecturas y patrones existentes, pero es suficiente para la implementación de la tarea # 6





Arquitecturas de aplicaciones

Por arquitectura, nos referimos a un patrón de diseño arquitectónico que cubre toda la aplicación o una parte de ella. Esta parte a menudo se denomina módulo. La aplicación está construida a partir de estos módulos. Los módulos en este caso no son   módulos de C # , sino módulos de arquitectura. Puede ser, por ejemplo, una sola pantalla de aplicación o varias pantallas relacionadas.





El tema de las arquitecturas es controvertido. Primero, cada desarrollador tiene una idea diferente de lo que debería ser una buena arquitectura. En segundo lugar, incluso si toma alguna arquitectura específica, puede encontrar varias implementaciones diferentes. Y la tercera razón es que no existen arquitecturas perfectas. Cada uno de ellos tiene ventajas y desventajas. Por lo tanto, cuando se habla de enfoques arquitectónicos, siempre hay algo por lo que regañar cualquiera de las soluciones.





Les contaré solo sobre tres soluciones arquitectónicas que considero las más adecuadas para este proyecto, además, tienen un defecto de entrada bastante bajo.





1. Apple MVC

, – MVC. , . Apple MVC,   Classic MVC





Patrón de diseño de 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.





Patrón de diseño MVP
MVP

MVC Apple. , , , ViewController Presenter.





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





3. MVVM

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





Patrón de diseño 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