加密类和List <t>

时间:2017-06-02 13:59:36

标签: c# design-patterns

假设我们有一个数据对象Patient,我们正在将List<Patient>绑定到UI小部件。

public class Patient
{
    public Patient(){}
    public string Name {get;set;}
    public string MedicalNotes {get;set;}
}

我们希望在将记录写入数据库之前加密 MedicalNotes属性的内容(假设我们是一家小公司,并且无法承担提供的SQL数据库的许可费用透明加密功能)和在列绑定到UI小部件之前解密列的内容。

我们是否实例化单个加密类并将其引用提供给Patient构造函数,以便List中的每个Patient对象都可以调用加密对象的方法?

或者Crypto实例是否位于Patient对象之外并在数据库IO类和List<Patient>

之间进行调解

2 个答案:

答案 0 :(得分:1)

您说您的数据库层需要增加安全性。所以我猜它属于那一层。保存前加密,加载后解密。

答案 1 :(得分:1)

如果我是你,我会把它分成3层,你的模型层不关心加密过程,你的数据库也不关心。这些责任必须交给另一方:

模型层:

public class Patient
{
    public string Name { get; set; }
    public string MedicalNotes { get; set; }
}

数据库层:

public static class PatientDb
{
    public static void SavePatient(Patient patient)
    {
        //whatever happens here, you didn't post this
    }
}

中间层:

public class PatientHelpers
{
    public void SavePatient(Patient unencryptedPatient)
    {
        var encrypted = Crypto.EncryptPatient(unencryptedPatient);
        PatientDb.SavePatient(encrypted);
    }
}

public static class Crypto
{
    public Patient EncryptPatient(Patient patient)
    {
        //whatever happens here, you didn't post this
        return patient;
    }
}