我怎样才能合并这两种类似的方法

本文关键字:种类 两种 方法 合并 | 更新日期: 2023-09-27 18:09:01

我使用的是实体框架,并且有包含多个电子邮件和电话实体的PERSON实体。当更新一个人时,我有一个更新地址的助手方法和一个更新电子邮件地址的助手方式。我想不出一个好方法来消除它们之间的所有代码重复。我的第一个想法是使用泛型,但我想不出如何做到这一点,因为我不会得到一个过于复杂的方法,它会降低可读性,而不是增加可维护性。非常感谢。

private void HandleEmailUpdate(PERSON personEntity, string emailType, string newValue)
{
    var emailEntity = personEntity.EMAILs.FirstOrDefault(h => h.EMAIL_TYPE == emailType);
    if (emailEntity == null)
    {
        if (string.IsNullOrEmpty(newValue))
            return;
        var newEmail = new EMAIL
        {
            EMAIL_TYPE = emailType,
            EMAIL_ADDR = newValue,
            SSN = personEntity.SSN,
            PID = personEntity.PID
        };
        personEntity.EMAILs.Add(newEmail);
        _context.Entry(newEmail).State = EntityState.Added;
    }
    else if (emailEntity.EMAIL_ADDR != newValue)
    {
        if (newValue == "")
        {
            _context.Entry(emailEntity).State = EntityState.Deleted;
        }
        else
        {
            _context.Entry(emailEntity).CurrentValues.SetValues(new {EMAIL_ADDR = newValue});
            _context.Entry(emailEntity).State = EntityState.Modified;
        }
    }
}
private void HandlePhoneUpdate(PERSON personEntity, string phoneType, string newValue)
{
    var phoneEntity = personEntity.PHONEs.FirstOrDefault(h => h.PHONE_TYPE == phoneType);
    if (phoneEntity == null)
    {
        if (string.IsNullOrEmpty(newValue))
            return;
        var newPhone = new PHONE
        {
            PHONE_TYPE = phoneType,
            PHONE1 = newValue,
            SSN = personEntity.SSN,
            PID = personEntity.PID
        };
        personEntity.PHONEs.Add(newPhone);
        _context.Entry(newPhone).State = EntityState.Added;
    }
    else if (phoneEntity.PHONE1 != newValue)
    {
        if (newValue == "")
        {
            _context.Entry(phoneEntity).State = EntityState.Deleted;
        }
        else
        {
            _context.Entry(phoneEntity).CurrentValues.SetValues(new {PHONE1 = newValue});
            _context.Entry(phoneEntity).State = EntityState.Modified;
        }
    }
}

用法:(我删除了带有"xxx"的名称(

HandlePhoneUpdate(entity, "ALT", updatedPerson.PhoneAlt);
HandlePhoneUpdate(entity, "CELL", updatedPerson.PhoneCellWork);
HandlePhoneUpdate(entity, "SECOND_CELL", updatedPerson.PhoneCellPersonal);
HandlePhoneUpdate(entity, "xxx", updatedPerson.Phonexxx);
HandlePhoneUpdate(entity, "HOME", updatedPerson.PhoneHome);
HandlePhoneUpdate(entity, "WORK", updatedPerson.PhoneWork);
HandleEmailUpdate(entity, "ALT", updatedPerson.EmailAlt);
HandleEmailUpdate(entity, "xxx", updatedPerson.Emailxxx);
HandleEmailUpdate(entity, "HOME", updatedPerson.EmailPersonal);
HandleEmailUpdate(entity, "xxx", updatedPerson.Emailxxx);
HandleEmailUpdate(entity, "WORK", updatedPerson.EmailWork);

我怎样才能合并这两种类似的方法

如果它们遵循相同的规则,那么统一PhoneEmail类并创建一个Contact类是有意义的。Contact类将具有Type属性(电子邮件、电话…(、Value属性以及其他属性(如果需要(。这样,您可以对两种类型(电子邮件和电话(使用相同的方法:HandleContactUpdate