Quando estou fazendo o design de uma tarefa, continuo lutando contra essa sensação incômoda de que, além de ser um esboço geral, será mais ou menos ignorado no final. Vou dar um exemplo:
Eu estava escrevendo um front-end para um dispositivo que possui operações de leitura / gravação. Fazia sentido no diagrama da classe fornecer uma função de leitura e gravação. No entanto, quando se tratou de escrevê-las, percebi que elas eram literalmente a mesma função, com apenas uma linha de código alterada (chamada de função de leitura versus gravação); portanto, para evitar duplicação de código, acabei implementando uma função do_io com um parâmetro que distingue entre operações. Adeus design original.
Essa não é uma mudança terrivelmente perturbadora, mas acontece frequentemente e também pode ocorrer em partes mais críticas do programa, por isso não posso deixar de me perguntar se há um ponto para projetar mais detalhes do que um esboço geral, pelo menos quando trata da arquitetura do programa (obviamente, quando você está especificando uma API, precisa explicar tudo).
Isso pode ser apenas o resultado da minha inexperiência em criar design, mas, por outro lado, temos metodologias ágeis que dizem "desistimos de planejar com antecedência, tudo vai mudar em alguns dias", o que geralmente é como eu me sinto.
Então, como exatamente devo "usar" o design?
do_io
parece ser um detalhe de implementação interna dessa classe. A interface pública será e provavelmente ainda deve ser,read(...)
ewrite(...)
é muito mais detalhada sobre a intenção da chamada.