Se estou prestes a desenvolver um aplicativo corporativo, mas pelo que entendo do processo ágil, divido os recursos em pequenos pedaços e os desenvolvo iterativamente. Eu costumava criar o banco de dados e o núcleo do aplicativo primeiro, depois os estendia iterativamente.
A pergunta é: tenho que manter o que costumava fazer anteriormente (desenvolver o núcleo primeiro) ou tenho que distribuir o desenvolvimento do núcleo pelo desenvolvimento das histórias? Mais tarde, não tenho certeza se o código será flexível o suficiente para futuras extensões!
Qualquer ideia?
architecture
agile
object-oriented-design
Sameh Deabes
fonte
fonte
Respostas:
Não desenvolva o núcleo primeiro . Um princípio fundamental do desenvolvimento Agile é escrever o código mínimo necessário para os recursos concluídos. Dessa forma, você pode entregar a qualquer momento. O código permanece flexível porque você refatora continuamente para eliminar a duplicação. A refatoração é suportada pelos testes automatizados que você escreveu para cada recurso conforme o construiu. O núcleo cresce automaticamente à medida que você considera a duplicação do código de nível superior.
Basicamente, em vez de desenvolver flexibilidade em uma tentativa geralmente fútil de minimizar alterações futuras de código caras, o Agile cria testes automatizados para dar suporte à refatoração, para que as alterações de código sejam relativamente baratas.
A refatoração de Martin Fowler é meu livro favorito sobre técnicas eficazes de refatoração. É muito mais fácil fatorar um núcleo utilizável do que definir um inicial. Definir um núcleo utilizável antes da implementação do recurso é quase impossível, a menos que você esteja apenas reimplementando uma API existente. E não há valor nisso.
fonte
Minha abordagem ao desenvolvimento ágil é criar "fatias verticais". Pego uma história da interface do usuário para armazená-la e implementá-la. Eu tenho algumas ferramentas leves que eu uso para ajudar nesse processo (como uma estrutura simples IRepository / UnitOfWork que possui adaptadores para In Memory (geralmente para teste), Entity Framework e NHibernate. argumento de se deve-se usar um O / RM, mas qual usar.E para mim depende do ambiente.
Descobri que essa abordagem supera os pessimistas em relação ao desenvolvimento ágil porque eles conseguem ver o software em funcionamento mais rapidamente do que se eu gastasse muito tempo na frente criando um núcleo. Combinado com o Design Orientado a Domínio e algumas outras técnicas que eu uso, geralmente sou capaz de obter muitas funcionalidades de trabalho na frente dos usuários muito rapidamente.
O teste de unidade TDD ou mesmo post-hoc é importante porque parte da manutenção da velocidade à medida que seu aplicativo cresce é ter a rede de segurança fornecida por um conjunto abrangente de testes de unidade. "Eu preciso fazer uma alteração nesta aula, como garantir que não quebrei nada?" Com um bom conjunto de testes de unidade, é tão simples quanto executar esse conjunto de testes. Sem, torna-se uma questão de executar manualmente o aplicativo para verificar. Não é nada divertido.
fonte
Crie a estrutura horizontal mínima que suporta uma fatia vertical de funcionalidade. A estrutura foi criada para ser extensível e é onde o maior esforço é concentrado inicialmente. A fatia vertical da funcionalidade é demonstrar que a estrutura suporta valor real. Nas iterações subsequentes, dedique menos esforço à medida que a estrutura é realizada e mais à criação de recursos usando a estrutura. Continue dessa maneira até que a grande maioria dos esforços se concentre na funcionalidade usando a estrutura desenvolvida nas iterações.
fonte