Galeria de mapas mentais A arte do design de estrutura de software
Quando quisermos transmitir conhecimento a outros sobre a arte do design de frameworks de software, será difícil convencê-los a aceitar nosso conhecimento porque não têm experiência semelhante à nossa.
Editado em 2024-04-10 17:25:12이것은 (III) 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제에 대한 마인드 맵이며, 주요 함량은 다음을 포함한다 : 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제 (HIF-PHI)는 신장 빈혈의 치료를위한 새로운 소형 분자 경구 약물이다. 1. HIF-PHI 복용량 선택 및 조정. Rosalasstat의 초기 용량, 2. HIF-PHI 사용 중 모니터링, 3. 부작용 및 예방 조치.
이것은 Kuka Industrial Robots의 개발 및 Kuka Industrial Robot의 모션 제어 지침에 대한 마인드 맵입니다. 주요 내용에는 쿠카 산업 로봇의 역사, 쿠카 산업 로봇의 특성, 쿠카 산업 로봇의 응용 분야, 2. 포장 프로세스에서 쿠카 로봇은 빠르고 일관된 포장 작업을 달성하고 포장 효율성을 높이며 인건비를 줄입니다. 2. 인건비 감소 : 자동화는 운영자에 대한 의존성을 줄입니다. 3. 조립 품질 향상 : 정확한 제어는 인간 오류를 줄입니다.
408 컴퓨터 네트워크가 너무 어렵습니까? 두려워하지 마세요! 나는 피를 구토하고 지식 맥락을 명확히하는 데 도움이되는 매우 실용적인 마인드 맵을 분류했습니다. 컨텐츠는 매우 완전합니다. 네트워크 아키텍처에서 응용 프로그램 계층, TCP/IP 프로토콜, 서브넷 디비전 및 기타 핵심 포인트에 이르기까지 원칙을 철저히 이해하는 데 도움이 될 수 있습니다. 📈 명확한 논리 : Mindmas 보물, 당신은 드문 기회가 있습니다. 서둘러! 이 마인드 맵을 사용하여 408 컴퓨터 네트워크의 학습 경로에서 바람과 파도를 타고 성공적으로 해변을 얻으십시오! 도움이 필요한 친구들과 공유해야합니다!
이것은 (III) 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제에 대한 마인드 맵이며, 주요 함량은 다음을 포함한다 : 저산소증-유도 인자 프롤릴 하이드 록 실라 제 억제제 (HIF-PHI)는 신장 빈혈의 치료를위한 새로운 소형 분자 경구 약물이다. 1. HIF-PHI 복용량 선택 및 조정. Rosalasstat의 초기 용량, 2. HIF-PHI 사용 중 모니터링, 3. 부작용 및 예방 조치.
이것은 Kuka Industrial Robots의 개발 및 Kuka Industrial Robot의 모션 제어 지침에 대한 마인드 맵입니다. 주요 내용에는 쿠카 산업 로봇의 역사, 쿠카 산업 로봇의 특성, 쿠카 산업 로봇의 응용 분야, 2. 포장 프로세스에서 쿠카 로봇은 빠르고 일관된 포장 작업을 달성하고 포장 효율성을 높이며 인건비를 줄입니다. 2. 인건비 감소 : 자동화는 운영자에 대한 의존성을 줄입니다. 3. 조립 품질 향상 : 정확한 제어는 인간 오류를 줄입니다.
408 컴퓨터 네트워크가 너무 어렵습니까? 두려워하지 마세요! 나는 피를 구토하고 지식 맥락을 명확히하는 데 도움이되는 매우 실용적인 마인드 맵을 분류했습니다. 컨텐츠는 매우 완전합니다. 네트워크 아키텍처에서 응용 프로그램 계층, TCP/IP 프로토콜, 서브넷 디비전 및 기타 핵심 포인트에 이르기까지 원칙을 철저히 이해하는 데 도움이 될 수 있습니다. 📈 명확한 논리 : Mindmas 보물, 당신은 드문 기회가 있습니다. 서둘러! 이 마인드 맵을 사용하여 408 컴퓨터 네트워크의 학습 경로에서 바람과 파도를 타고 성공적으로 해변을 얻으십시오! 도움이 필요한 친구들과 공유해야합니다!
A arte do design de estrutura de software
Prefácio
“Assim que a API for lançada, ela facilitará nossa eterna coexistência”
Quando queremos transmitir conhecimento a outras pessoas, será difícil convencê-las a aceitar o nosso conhecimento porque não têm experiência semelhante à nossa.
Teoria e Razões
"Arte" ou "Engenharia"
Exclusividade importante da API: consistência
Como existe consistência dentro do grupo?
Trabalho em equipe perfeito
visão compartilhada
termo público
P2 Um ano depois, confirmei essa suposição. Como o Netbeans é um projeto de código aberto, existe uma API que atrai desenvolvedores externos. No início, esse contribuidor de código externo fazia principalmente alguns trabalhos de correção de bugs. Mais tarde, ele passou a ser responsável por um subprojeto sozinho e projetou APIs relacionadas. A pessoa que foi originalmente responsável por projetar esta API disse que descobriu que a API deste subprojeto estava cada vez pior, mas não conseguiu encontrar o motivo e esperava que eu pudesse ajudar. Ele disse: Ele não gosta muito dessas novas APIs e não quer integrá-las aos projetos pelos quais é responsável. Mas ele também não sabia dizer qual era o problema com essas novas APIs. Por fim, ele disse que essas novas APIs pareciam inconsistentes com sua visão original. Certa vez eu disse algo semelhante a ele. Pelos meus padrões, a API que ele escreveu é inconsistente com a ideia da API do NetBeans!
metodologia
racionalismo
Empirismo
Sem emoção
Compreensão superficial
A extensão da compreensão de algo se limita a saber como usá-lo
Entendimento Profundo
Compreenda os princípios e leis por trás de algo
Na maioria das vezes, uma “compreensão superficial” é suficiente
ignorância seletiva
Alguns conteúdos requerem compreensão aprofundada
O princípio threadless do desenvolvimento de aplicativos
Tente permitir que o pessoal relevante, responsável final pela integração, faça um bom trabalho na integração sem ter que entender o sistema em profundidade.
Objeto: pessoas
Critérios para avaliação da qualidade das APIs
Por que?
Queremos ser capazes de montar "sem thread" grandes blocos de construção em aplicativos
o que?
Método, classe, assinatura de campo
Arquivo (pipe unix)
Variáveis de ambiente e opções de linha de comando
Informações de texto (toString)
protocolo
Comportamento
A forma mais importante de avaliar a compatibilidade é a "operação normal", mas isso é determinado pela implementação interna específica.
valor de retorno nulo
globalização
…
Qualidade
compreensibilidade
Caminhos de comunicação entre designers e desenvolvedores
A importância dos exemplos
consistência
Reduza a curva de aprendizado
permanecer compatível
visibilidade
Forneça um "portal" para encontrar as soluções que você precisa
Com base em metas e tarefas reais ou esperadas
Os usuários não se importam com classes específicas
Tarefas simples devem ter soluções simples
usuário comum
usuário estendido
proteger o investimento
Pense mais nos usuários
Mudando metas
compatível com versões anteriores
Compatível com código-fonte
Compatível com binário
Funcionalmente compatível
fácil de perder
Atitude, “bons chefes” não reclamam dos clientes
A importância da orientação para casos de uso
Exemplo
O que devo fazer
Cenas
Você deve fazer isso primeiro e depois aquilo
Revisão do design da API (excelentes regras de API)
Use design de API orientado a casos
Ao projetar uma API, é necessário realizar uma análise abstrata com base em alguns cenários específicos e no entendimento da API e, finalmente, fornecer um design
Consistência de design de API
As APIs geralmente são concluídas por vários designers, mas toda a equipe deve ser capaz de manter alguns princípios básicos de “melhores práticas”. Não importa quão bem projetada seja uma interface, desde que ela viole a consistência de toda a equipe, preferiríamos nos contentar com a segunda melhor.
API simples e clara
Tarefas simples e comuns devem ser mais fáceis de realizar. Se você projetar com base em uma abordagem orientada a casos de uso, poderá verificar facilmente se essas APIs podem concluir esses casos de uso importantes por meio de cenários que podem ser facilmente implementados.
menos é mais
As funções fornecidas por uma API ao mundo exterior devem incluir apenas as funções descritas nos casos de uso. Isto evita discrepâncias entre a funcionalidade necessária e o que é realmente fornecido.
Melhorias de suporte
A biblioteca deve ser mantida continuamente. Mesmo que surjam novas necessidades ou que o autor original saia, esta biblioteca de classes não será abandonada.
Prática de design
Torne público apenas o que você deseja tornar público
Fácil de adicionar, difícil de remover
Ao lançar a primeira versão, remova conteúdo desnecessário
Métodos sobre campos
Exceto para tipos básicos declarados estáticos e finais, constantes de string, enumerações e objetos imutáveis, nenhum outro campo deve ser exposto.
Métodos de fábrica são melhores que funções
O valor de retorno de um método de fábrica não é necessariamente uma instância do tipo declarado, mas pode ser uma instância de uma subclasse
O objeto retornado a cada vez não é necessariamente um objeto recém-criado, ele pode ser armazenado em cache
Controle de sincronização, processamento unificado de código antes e depois da criação de um objeto
Torne tudo imutável
Se você não quiser ter subclasses, você deve torná-las não-herdáveis
Evite abusar de métodos setter
Nunca declare métodos setter em APIs formais, a menos que seja necessário
definirEnable
Pode ser sensível ao contexto
O julgamento isEnable torna setEnable sem sentido
Exponha a funcionalidade através de métodos amigos sempre que possível
Método de acesso de pacote padrão do Java, classe interna
Dê mais direitos aos criadores de objetos
permissão de acesso
Evite expor herança profunda
reutilização de código
Reutilização de função
"Herança" não é usada para alterar comportamentos específicos, mas para adicionar algumas ações adicionais
Se você herdar uma classe apenas para mudar o caminho de execução de determinados métodos, essa abordagem deverá ser evitada
Recomendação: evite herança profunda, defina interfaces de programa e deixe os usuários implementarem essas interfaces
Programa voltado para interfaces em vez de implementações
Separação de definição abstrata (interface) e implementação
colaborar
Deixe claro para os usuários da API: ao usar APIs, você deve seguir os princípios corretos. Se precisar usar uma API, você deve respeitar os princípios da API e não violá-la.
Explique claramente os requisitos da API, defina os casos de uso correspondentes e ajude os designers de API a implementar tais APIs.
Os métodos protegidos não podem ser removidos, resultando em modificação por subclasses
Adicionar um método abstrato a uma interface forçará suas subclasses não abstratas a implementar o método
Arquitetura modular
Orientado a objetos não evita programação espaguete
O objetivo da modularização: conseguir um acoplamento fraco de vários componentes
A arquitetura modular separa a especificação da implementação
No módulo onde está localizada a especificação, haverá pelo menos uma pequena “entrada”
Injeção de dependência
Primavera
Pesquisa Netbean
Expandir
P111 Em 2001, apresentamos um tópico chamado "Posicionamento e Cooperação de Componentes" na conferência JavaOne. O conteúdo deste tópico está de alguma forma relacionado a este capítulo. No entanto, o comitê organizador da conferência JavaOne da época pode simplesmente pensar que o nome do tópico não é legal o suficiente, ou talvez porque sintam que a palavra componente é usada em demasia e a palavra "componente" inclui quase tudo que se possa imaginar. então o problema não foi aceito. Até 2006, meu colega Tim Boudreau e eu submetemos um tópico semelhante chamado "Padrões de injeção de descoberta e injeção de dependência em arquiteturas modulares". Com certeza, como esperávamos, o tema foi aceito pela comissão organizadora. Isso significa que você deve encontrar termos próximos ao seu público-alvo para impressioná-lo. Assim que ouviram a palavra “injeção de dependência”, seus corações explodiram. Assim como a palavra API, um nome apropriado facilita a comunicação. Para os usuários, quanto mais fácil for para eles entenderem a palavra API, mais fácil será para eles aceitarem o conteúdo relacionado à API.
Na verdade, existem mais algumas palavras: arquitetura, padrão
Ao projetar uma API, diferencie seus grupos de usuários-alvo
API
Pode ser adicionado, mas não removido
Chamado por outros para completar certas funções
aula final
coeso, independente
IPS
Interface do provedor de serviços
Pode ser removido, mas não adicionado
Para que outros estendam a funcionalidade da API
interface
Evite misturar os dois
Decomponha razoavelmente a API
API
IPS
Classificação do NetBeans
API principal
API de suporte
SPI principal
Suporte SPI
Organize sua estrutura de API de acordo com as diferentes necessidades de seus grupos de usuários
Tenha em mente a testabilidade
Objeto simulado
Fornece objetos simulados para a API
O código de teste faz parte da especificação
Boas ferramentas facilitam o design da API
mago
Permita que os clientes comecem o mais rápido possível
O primeiro objetivo do projeto é trazê-lo rapidamente ao mercado
Cada tecnologia importante no NetBeans possui um assistente correspondente para estabelecer a estrutura básica inicial.
Conjunto de testes de compatibilidade
Para usuários de SPI e implementadores de API
Colabore com outras APIs
Use APIs de terceiros com cautela
modo de embalagem
Exponha apenas conteúdo abstrato
Quanto mais exposto, menos espaço há para evolução.
Fortaleça a consistência da API
Agentes e Portfólios
Evite o uso indevido da API
É preciso haver consistência entre todos os níveis.
Alguns conteúdos do tempo de execução específico da API
“Notório” – Em vez de reclamar dos usuários, é melhor mudar de atitude
"Guardião" - teste automatizado
Sincronização e impasse
Descreva correta e apropriadamente seu modelo de threading
Armadilhas em monitores Java
Herança afeta sincronizado
Para APIs públicas, os métodos externos não podem ser declarados como sincronizados.
Sincronização Java e impasses com armadilhas em todos os lugares
programação declarativa
Idéia básica: em vez de permitir que os usuários da API digam ao programa passo a passo o que fazer, eles só precisam informar ao programa seus resultados e então deixar a API fazer o trabalho.
A implementação do NetBeans Lookup requer apenas uma descrição XML simples e não requer registro ou logout do usuário.
autodescritivo
vida cotidiana
A vida real está cheia de fatores mutáveis, e as coisas teóricas não podem ser aplicadas inalteradas na vida. Você não só precisa saber o que funciona e o que não funciona, mas também precisa saber como trabalhar para fazer isso
Opiniões extremas são prejudiciais em vez de úteis
API necessária
é bonito
está correto
Se a facilidade de uso for sacrificada pela correção, mais problemas poderão surgir
Mercúrio e SVN
Mantenha simples
é alto desempenho
Absolutamente compatível
é simétrico
Contradições no design da API
contraditório
Definição do Wiki: "Acreditar em duas visões conflitantes simultaneamente, sem perceber que são contraditórias"
Departamento de segurança
Segurança de aeronaves
Os desenvolvedores reclamam de coisas como análises, padrões de programação, etc. Mas os guardiões da API precisam ficar alertas o tempo todo, caso contrário podem surgir problemas devido a um pequeno descuido. Por outro lado, não é apenas um problema menor, pelo menos mostra que o trabalho que você está fazendo é realmente útil.
relatório minoritário
Melhorar a API
Trabalho em equipe
Conduza revisões de código antes de enviá-lo
Convença os desenvolvedores a fornecer documentação para suas APIs
Raciocínio retroativo
antes de escrever código
Visão geral
Perguntas frequentes
Um monitor consciente
As ferramentas monitoram todas as mudanças que requerem atenção
Se você não tem ferramentas, você precisa de alguém que seja “onisciente e todo-poderoso”
Receba patches de API
Siga apenas bons conselhos
Desenvolver requisitos
Os requisitos não podem ser muito complicados
Use jogos de competição para melhorar as habilidades de design de API
Fornecido para download por www.xmindchina.net