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