Projetando em C # através dos olhos de um calouro -NotePad ++ # 6

Olá a todos, chamo-me Arkady, sou estudante da Escola Superior de Economia e neste artigo iremos falar sobre a tarefa PeerReview # 6 NotePad ++, nomeadamente sobre as arquitecturas adequadas a esta tarefa e alguns padrões.





A tarefa

Nesta atribuição, a principal tarefa é implementar um aplicativo GUI. Proponho não me afastar muito do assunto e olhar imediatamente o que é arquitetura e como ela pode nos ajudar neste caso.





As informações desta postagem não cobrem todas as arquiteturas e padrões existentes, mas são suficientes para a implementação da tarefa # 6





Arquiteturas de aplicativos

Por arquitetura, queremos dizer um padrão de design de arquitetura que cobre todo o aplicativo ou parte dele. Essa parte costuma ser chamada de módulo. O aplicativo é construído a partir desses módulos. Módulos, neste caso, não são   módulos C # , mas módulos de arquitetura. Isso pode ser, por exemplo, uma única tela do aplicativo ou várias telas relacionadas.





O tópico das arquiteturas é controverso. Primeiro, cada desenvolvedor tem uma ideia diferente do que deve ser uma boa arquitetura. Em segundo lugar, mesmo se você usar alguma arquitetura específica, poderá encontrar várias implementações diferentes. E a terceira razão é que não existem arquiteturas perfeitas. Cada um deles tem vantagens e desvantagens. Portanto, ao discutir abordagens arquitetônicas, sempre há algo pelo que repreender qualquer uma das soluções.





Vou falar apenas sobre três soluções arquitetônicas que considero as mais adequadas para este projeto, além disso, elas têm um defeito de entrada bastante baixo.





1. Apple MVC

, – MVC. , . Apple MVC,   Classic MVC





Apple MVC Design Pattern
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.





Padrão de design MVP
MVP

MVC Apple. , , , ViewController Presenter.





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





3. MVVM

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





Padrão de design 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