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
, – . . .
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.
MVC Apple. , , , ViewController Presenter.
, , MVC, . Presenter , , . , , .
3. MVVM
MVVM MVP. , ViewModel. . , . MVP, . , data binding ( ). , . .. , ViewModel, .
MVVM MVP . ,
, . MVVM , .. View ViewModel. , .
. MVVM, .
. – .
– . , . , .
, . :
(Singleton)
Target-Action
(Observer)
(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/
, , , .
. -, .
, !