Antecedentes: Meus colaboradores e eu estamos escrevendo um artigo para uma revista acadêmica. No decorrer de nossa pesquisa, escrevemos um programa de simulação em Java. Queremos tornar o programa de simulação disponível gratuitamente para uso de outras pessoas. Decidimos hospedar o código em um repositório do GitHub. Para facilitar o uso de outras pessoas, queremos escrever uma boa documentação para o nosso programa, incluindo:
- Javadocs para cada classe e método
- Como usar o código
- Descrevendo a estrutura de alto nível do código
Minha pergunta de alto nível é: você poderia fornecer um bom exemplo das palavras e diagramas que podem ser usados para descrever a estrutura de alto nível de um programa? Isso inclui como sub-perguntas:
- Como mostramos quais classes estão contidas em quais pacotes?
- Como mostramos quais pacotes dependem de outros pacotes?
- Como mostramos como os objetos / classes no programa funcionam juntos?
- Tentamos usar princípios de design controlados por domínio no design do meu código. Como mostramos a correspondência entre os objetos no domínio e os arquivos de código-fonte específicos que codificam esses objetos? (Veja minha descrição em "linguagem onipresente" do projeto abaixo.)
O que eu fiz até agora
Linguagem onipresente
Colocamos uma descrição "linguagem onipresente" do código em um arquivo ubiquitous-language.md
, conteúdo abaixo.
O objetivo deste projeto é estudar o desempenho de uma política de reabastecimento em uma cadeia de suprimentos simples com uma única instalação, sob diferentes modelos de lead time, atrasos de relatórios e modelos de demanda.
Em cada período, ocorrem os seguintes eventos:
- Se uma remessa estiver programada para chegar à instalação no período atual, o nível de estoque da instalação será incrementado por X unidades.
- Se o cronograma indicar que o período atual é um período de relatório, a instalação envia um relatório ao fornecedor . O fornecedor pode receber o relatório instantaneamente, ou com um atraso de várias semanas, conforme especificado na programação .
- Se o fornecedor recebeu um relatório , com base na política de reabastecimento , ele calculará uma quantidade de reabastecimento de X unidades. Uma remessa de X unidades do produto será agendada para chegar após um prazo de l períodos.
- Os clientes chegam às instalações e exigem X unidades do produto. Qualquer demanda não atendida é perdida.
Estrutura do código fonte
Colocamos uma descrição "de alto nível" incompleta do código em um arquivo structure.md
, conteúdo abaixo.
Estrutura em nível de pacote
No nível mais alto, o código fonte é organizado em três pacotes
com.gly.sfs
A classe principal com omain
método reside neste pacote.com.gly.sfs.model
As classes de modelo de domínio residem neste pacote.com.gly.sfs.util
As classes auxiliares residem neste pacote.