Continue a criar, acelere o crescimento! Este é o 8º dia da minha participação no "Nuggets Daily New Plan · June Update Challenge", clique para ver os detalhes do evento
DICAS: A seguinte linguagem de exemplo de código é Go
Descrição do Problema
Xiao A e eu estamos desenvolvendo em paralelo, ele está otimizando a lógica do código antes e eu estou desenvolvendo novas funções.
Xiao A enviou o código para a ramificação de teste antes de mim e encontrei muitos conflitos quando quis enviar meu novo código de função para a ramificação de teste.
Resolver conflitos primeiro é uma perda de tempo, e preciso resolver conflitos toda vez que meu novo código de recurso é testado.
Além disso, quando testo a ramificação para resolver o conflito, só consigo resolvê-lo de acordo com a lógica de código otimizada por Xiao A, o que não é consistente com minha própria lógica de ramificação.
O código entregue aos colegas de teste é inconsistente com o código do meu próprio branch.Esse tipo de teste não tem sentido.
Reflita sobre o que deu errado
-
Uso irracional do modo de fábrica
-
Atribuição de tarefas não razoável
nível de código
Por ser o padrão de projeto de fábrica, a classe de implementação A pela qual sou responsável não está diretamente relacionada à sua classe de implementação B. Mas porque ele modificou a definição do método na classe de fábrica.
Por exemplo, a interface na classe de fábrica anterior é definida assim
package factory
type xxx interface {
GetXxxx(ctx context.Context, req aaa.aa) (res bbb.bb, err error)
}
复制代码
Mas Xiao A modificou a definição da interface na classe de fábrica:
package factory
type xxx interface {
GetXxxx(ctx context.Context, req ccc.cc) (res ddd.dd, err error)
}
复制代码
Isso leva a um problema:
Se eu quiser mesclar meu código na ramificação de teste, também tenho que modificar o tipo de parâmetro e o tipo de retorno da minha classe de implementação A.
Mas estamos todos desenvolvendo em ramos diferentes, e não tenho o tipo definido por ccc.cc
ele ddd.dd
.
Eu não posso defini-lo diretamente ccc.cc
. ddd.dd
Eu quero vir e desenvolver no meu próprio ramo. Primeiro, por causa de requisitos inconsistentes, o ciclo online de Xiao A será mais longo que o meu. Segundo, esta operação em si não é padronizada.
Resolva o problema
Otimize a partir do design de código:
A solução que pensamos é usar a interface razoavelmente
Defina os parâmetros de entrada e saída do método de interface a ser implementado na classe de fábrica para o interface{}
tipo
package factory
type xxx interface {
GetXxxx(ctx context.Context, req interface{}) (res interface{}, err error)
}
复制代码
Isso facilita a expansão.
Otimize a partir de operações git:
Mas o método de definir os parâmetros de entrada e saída como interface{}
tipos não resolveu fundamentalmente nosso problema.
A razão é esta:
O requisito do pequeno A é otimizar os parâmetros de entrada e saída da classe de fábrica e cada classe de implementação como um todo, otimizar a lógica interna e extrair métodos.
A modificação do pequeno A leva a um grande conflito com minha lógica de implementação.
Mas o envio do git dele foi submetido ao ambiente de teste antes de mim, então não pude enviar meu código. Se eu quisesse enviar, teria que resolver vários conflitos. Para resolver o conflito, devemos alterá-lo de acordo com a lógica de otimização de Xiao A, e os testes dados aos alunos do teste são inconsistentes com o meu próprio ramo.
Difícil de superar.
Considerando que a modificação do pequeno A não precisa ser testada por enquanto, o ciclo online também é relativamente longo.
A solução final é esta:
Extraiu um branch de backup do branch de teste remoto
exclua o branch de teste remoto
Envie a ramificação que preciso testar localmente para a ramificação de teste e entregue o teste.
git renomear branch remoto
1. Renomeie a filial local primeiro
git branch -m 旧分支名称 新分支名称
复制代码
2. Exclua a ramificação remota
git push --delete origin 旧分支名称
复制代码
3. Carregue a filial local com o novo nome modificado
git push origin 新分支名称
复制代码
4. A ramificação local modificada está associada à ramificação remota
git branch --set-upstream-to origin/新分支名称
复制代码
Resumir
É legal desenvolver e manter um crematório.
A operação não é padronizada e os familiares estão em prantos.
afinal
Obrigado por ler, e bem-vindos a todos: like, favorito,moeda(focar em)! ! !