David West, em seu livro Object Thinking (capítulo 10, seção 1, subseção 2), propôs que, em um ambiente ideal de OO, todos os objetos deveriam ser capazes de se apresentar mediante solicitação; seja para humanos (como GUI), componentes não nativos (como JSON e / ou XML) ou qualquer outra parte interessada:
O pensamento sobre objetos diz que uma visão (às vezes chamada de interface) - gráfica ou não - é um meio para um objeto se comunicar com outro objeto e nada mais. A necessidade de uma visualização surge quando um objeto precisa se apresentar de forma "não nativa" para outro objeto (geralmente um ser humano) ou aplicativo (por exemplo, uma visualização XML para objetos de dados compartilhados entre plataformas).
A descoberta da necessidade e dos parâmetros que devem ser satisfeitos por uma exibição é manifestada nos cenários em que o objeto participa. Sempre que um objeto é solicitado a se exibir, ele deve usar uma exibição - uma representação - apropriada para o remetente dessa mensagem de exibição. Se, por exemplo, um objeto está tentando instanciar-se (obter um valor para si mesmo), ele deve apresentar uma visão de si mesmo como uma solicitação implícita a um ser humano (ou outro objeto de prestação de serviço) por um valor. Se estivermos criando uma GUI que servirá como intermediário entre um objeto de software e um objeto humano, usaremos glifos para fins de exibição e widgets para fins de interação.
Mas quais glifos e widgets precisam ser incluídos na GUI? Somente aqueles necessários para concluir o cenário ou os cenários 4 de interesse imediato à medida que o aplicativo é executado. Essa perspectiva é contra-intuitiva para a maioria dos desenvolvedores, pois sugere que uma GUI seja definida a partir do aplicativo.
Como exemplo, considere uma cervejaria. De um lado estão cubas cheias de cerveja. Na complexa linha de produção que consiste em lavadoras de garrafas, estações de envase, tampadoras e montadoras de embalagens. Acima de tudo, há uma estação de controle que monitora a cervejaria e notifica os gerentes humanos sobre status e problemas. É provável que os desenvolvedores tradicionais iniciem sua análise e design de "um sistema de gerenciamento de cervejaria" do ponto de vista do painel de controle. Isso é análogo ao design a partir da interface no.
O pensamento de objetos sugere, em vez disso, que você considere qual objeto é o principal cliente da cervejaria e de todas as suas inúmeras máquinas. Em nome de quem existe o complexo labirinto de equipamentos? A resposta correta dos negócios é, obviamente, "O cliente". Mas uma resposta mais reflexiva do pensamento sobre objetos é: "A cerveja". Todos os cenários são escritos da perspectiva da cerveja, tentando entrar em uma garrafa, com uma tampa, colocada em um pacote e residente em um caminhão. O painel de controle é um observador passivo 5 do estado da cervejaria. Se a cerveja encontrar um problema em algum momento, é responsabilidade da cerveja solicitar intervenção dos operadores humanos enviando uma mensagem ao painel de controle (ou painéis de controle específicos da máquina) solicitando um serviço de intervenção.
Essa perspectiva simplificará o design da GUI e, mais importante, eliminará o host de objetos de gerente e controlador que parecem surgir inevitavelmente ao projetar a partir da perspectiva do painel de controle (GUI).
Vindo de um iniciante no mundo OO: será esse realmente o caso?
Ter objetos que sabem se representar certamente poderia reduzir o número de objetos de controlador / gerente que West disse repetidamente em seu livro que um Object Thinker supostamente deveria tentar evitar a todo custo. Mas o cumprimento dessa "regra" não quebrará o SRP ?
Além disso (se for o caso), dada uma implementação típica em, digamos, um aplicativo Android: Como alguém pode atingir esse tipo de objetivo? Todo objeto que criamos deve saber se apresentar como um View?