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
, – . . .
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/
, , , .
. -, .
, !