Recentemente, entrei em um debate com outro desenvolvedor sobre a classe abaixo:
public class GroupBillingPayment
{
public void Save(IGroupBillingPayment model)
{
if (model == null || UserInfo.UserID == 0)
{
throw new Exception("GroupBillingPayment object or Current User Id is NULL , Please Contact Administrator.");
}
Data.GroupBillingPayment groupBillingPayment = RepositoryManager.GroupBillingPaymentRepository.GetById(model.GroupBillingPaymentID);
Mapper.Map(model, groupBillingPayment);
ServiceManager.GroupBilling.IsBillAlreadyCancelled(groupBillingPayment.GroupBillingID, THROW_ERROR);
groupBillingPayment.UpdatedBy = UserInfo.UserID;
groupBillingPayment.UpdatedOn = DateTime.Now;
RepositoryManager.GroupBillingPaymentRepository.Update(groupBillingPayment, false);
UpdateGroupBilling([Parameters])
}
}
Eu acredito UpdateGroupBilling
que não deve ser chamado dentro do método save, pois viola o princípio da responsabilidade única. Porém, ele diz que sempre que um pagamento é feito, o faturamento deve ser atualizado. Portanto, esta é a abordagem correta.
Minha pergunta, o SRP está sendo violado aqui? Se sim, como podemos refatorá-lo melhor para que ambos os nossos critérios sejam atendidos?