Misturar níveis de abstração coloca uma bomba na base do seu projeto

Ao longo dos anos de trabalho como arquiteto, vi diferentes clientes, e um dos erros mais comuns na formulação de especificações técnicas e desejos do cliente é misturar diferentes níveis de abstração. Uma pessoa chega e diz:



- Preciso de um hardware que controle o acionamento das portas e mostre o estado atual em uma tela de sete segmentos, e sempre com um servidor externo para controle remoto, para que possa se comunicar com este servidor via TCP, e leve VueJS para o painel de controle.



Parece que está claro o que a pessoa deseja. Alguém até mesmo tem tal TK causa entusiasmo - uma pessoa, ao que parece, entende claramente o que quer. Freqüentemente, até aponta para controladores / componentes / estruturas / protocolos específicos.



E para tal pedido, é claro, você pode fazer a peça de ferro necessária. E funcionará mesmo se os componentes selecionados não se contradizerem. Mas se o cálculo vai não para o projeto, mas para o produto, e então ele precisará ser suportado, então é muito mais útil gastar tempo e dividir cuidadosamente esses desejos em níveis, para entender por que essa tela, por que o TCP e onde o VueJS entra. É bem possível que essas sejam tecnologias pelas quais o cliente tem sentimentos agradáveis ​​devido à síndrome do patinho. Ou ele simplesmente não sabe que existem outros tipos de telas.



Neste caso, falamos primeiro sobre o primeiro nível: o dispositivo que controla o drive, com indicação e controle remoto.



Em seguida, começamos a especificar os requisitos (mas não tecnologias específicas).

Dispositivo em caixa IP68, com alimentação de 230 V, que comanda um acionamento assíncrono de 800W através de um conversor de frequência via modbus, que possui um indicador bem visível, cujos quatro estados (aberto / fechado / em andamento / avaria) devem ser reconhecidos por uma pessoa a partir de 10 metros, que tem controle remoto disponível de navegadores modernos da Internet.



E só depois disso você pode começar a selecionar o nível de implementação para os requisitos. Aqui está tal controlador, aqui está tal transceptor rs485, aqui está tal fonte de alimentação, aqui está tal indicador.



Separar esses dois níveis (requisitos e implementação) é fácil - na maioria dos casos, você pode escolher diferentes implementações para os mesmos requisitos e isso não mudará o nível dos requisitos de forma alguma. O nível de requisitos pode mudar devido ao fato de que a implementação é muito cara ou você não gosta dela visualmente, mas não deve mudar devido à escolha de um controlador que seja mais conveniente para o desenvolvedor, caso contrário, você examinou profundamente os requisitos ou estava simplesmente com preguiça de descobrir por que foi formulado tal requisito.



Digamos que um cliente queira uma tela com caracteres de 8 centímetros. Neste ponto, o arquiteto ou gerente de produto deve perguntar por que exatamente 8 centímetros? Na maioria dos casos, verifica-se que o cliente tem um requisito “visibilidade de 10 metros” no interior, mas decidiu simplificar a tarefa e imediatamente expressou um requisito específico. Ou ele simplesmente não consegue olhar de forma abstrata, porque pensa no projeto em objetos mais compreensíveis: uma "tela visível de 10 metros" abstrata é mais complicada do que "uma grande, bem, você sabe, uma exibição de segmentos, em uma caixa, estou aqui Vou pendurar na parede. "



Mas o cliente, por definição, não tem competência para desenvolver projetos, caso contrário ele não teria vindo até você. E mesmo que ele possua essas competências, ele não pode aplicá-las no desenvolvimento desse projeto em particular, porque por que ele veio até você então?



As decisões em projetos devem ser tomadas por quem será responsável por eles. Se o cliente não for responsável pelo tempo de desenvolvimento do código para uma tela específica que escolheu, ele não deve selecionar essa tela. A tarefa do cliente é dizer quais requisitos, em sua opinião, o modelo de tela escolhido implementa.



O desafio para o tomador de decisões arquitetônicas é selecionar a solução mais apropriada para atender a esses requisitos. Pode ser um ecrã LED, um LCD ou apenas um semáforo de 4 cores e um quadro com inscrições coladas.



Mas o arquiteto não deve tomar tudo o que o cliente diz como dado: se assim fosse possível elaborar uma especificação técnica suficiente para o desenvolvimento, o cliente não precisaria de intermediários entre ele e o empreendimento.



A descrição dos requisitos não ao nível da arquitetura a que pertencem é uma coisa perigosa que certamente enterrará a arquitetura do projeto, reduzindo-a não apenas a uma descrição de desejos, mas a uma mistura perigosa de gases que são seguros por si só, mas prontos para explodir quando misturados. E o sistema implementado de acordo com esta arquitetura irá explodir mais cedo ou mais tarde - com abstrações atuais, modificações complexas ou muletas caindo com qualquer mudança na funcionalidade.



Imagine que você está construindo uma casa. O elemento básico da casa é o tijolo. Você não pode comprar meio tijolo, mas comprar cinco caminhões basculantes de tijolos não compra uma casa. E mesmo cem tijolos não se transformam em uma parede. Para construir, no nível mais baixo, você terá que operar exatamente com um tijolo, nem mais nem menos.



Mas projetar uma casa em tijolos, e mesmo em conglomerados de tijolos, é uma ideia muito ruim.



Primeiro, a complexidade aumenta. Qualquer memória e recursos são finitos e é melhor gastar menos do que mais. A casa, que descreve a localização de cada tijolo, é muito difícil de perceber, consiste em muitos elementos. É difícil desenhar (em vez de desenhar rapidamente salas individuais, desenhamos cada tijolo), os desenhos são difíceis de ler, os modelos 3D demoram muito para renderizar, as listas de compras operam com o número exato de tijolos em vez de toneladas.



Em segundo lugar, a flexibilidade é perdida: deslocar um tijolo já é um erro. Não damos margem de manobra em um baixo nível de desenvolvimento, o que nos obriga a fazer o trabalho de outra pessoa e receber mensagens de erro que não são críticas para nós. Se definirmos a tarefa como “fazer uma parede de tijolos com 30 centímetros de espessura”, o construtor tem a oportunidade de colocar os tijolos como quiser, desde que não viole a resistência ou outras restrições. Se dermos a ele um desenho exato da localização dos tijolos, na próxima verificação, a diferença acumulada na espessura da costura de alguns milímetros nos dará um erro de meio centímetro na localização de um tijolo específico, o que levará a uma incompatibilidade entre a parede e seu TK. Às vezes, isso é um erro, mas na maioria dos casos, a posição incorreta de um tijolo não afeta nada e é ditada pelas circunstâncias,que não poderíamos levar em consideração ao projetar: por exemplo, dimensões incorretas de tijolos de produção. Você pode voltar, pode construir a partir disso, será mais fácil e barato. Projetar no nível de tijolos individuais nos rouba essa escolha, forçando-nos a atingir o resultado ideal ou jogar fora todo o trabalho.



Em terceiro lugar, não podemos passar para outro nível, começar a pensar em quartos, contanto que só tenhamos conglomerados de tijolos fluindo infinitamente uns para os outros e algum tipo de espaço entre eles. Os tijolos são mais importantes para nós do que o espaço entre eles, é apenas a ausência de tijolos, e não um lugar para a vida. Parece que uma casa está sendo construída por causa dos cômodos, mas todo desejo de mudar a parede de um cômodo é tão difícil, leva a tantas operações para mover tijolos e construir uma nova ordem de alvenaria que quase paramos de fazer isso: é mais fácil concordar com uma parede desconfortável do que mover tijolos constantemente -aqui no plano.



Quarto, a ideia de substituir o elemento básico é insuportável. Tudo é construído em tijolos, você conta as distâncias em tijolos, você conta o custo em tijolos, você conta o peso em tijolos, você conta a condutividade térmica da parede em tijolos. Isso é conveniente, pois não cria unidades de medida desnecessárias, abstrações desnecessárias. A condutividade térmica em tijolos é facilmente traduzida em distância e o custo é facilmente derivado da distância.



Mas é impossível lidar com uma casa feita de outros materiais: você tem que parar de focar nos tijolos e isso destrói toda a imagem do mundo. Embora, com a separação correta das camadas de abstração, você irá projetar perfeitamente quartos em metros, calculando o custo em rublos, a carga nas pilhas em toneladas, calcular a condutividade térmica em W / (m K), e apenas no último nível de projeto você decide o que levar - tijolos , concreto aerado ou painéis de concreto. E se o cliente não gostar da solução, mude-a sem mexer no resto do projeto.



Trabalhar com arquitetura é percorrer níveis de abstração. A visão destes níveis é uma propriedade essencial para um bom arquiteto.



All Articles