之前有寫了一篇文章EntityFrame SaveChange之後寫Log (Entity Framework 資料異動寫入Log)
但是世界沒有這麼美好,客戶想要各種的客製化Log,讓這個覆寫SaveChange不堪使用
幾乎是無用武之地,客戶已經沒這麼好騙了,幾乎每個Table新增時都要有各種花式寫Log
於是想了一個概念,如下面的Example,也不知道好不好
namespace ConsoleApp1 { class Program { static void Main(string[] args) { var test1 = new Test1(); test1.SaveChange(new TestModel { Name = "1234", Mail = "1234@gmial.com" }); var test2 = new Test2(); test2.SaveChange(new TestModel { Name = "5678", Mail = "5678@gmial.com" }); Console.ReadLine(); } } public class TestModel { public string Name { get; set; } public string Mail { get; set; } } public interface ITest<TModel> { int SaveChange(TModel model); } public class Test1 : TestBase, ITest<TestModel> { public int SaveChange(TestModel model) { //EF Savechange //不特別處理Log base.AddLog(model); return 1; } } public class Test2 : TestBase, ITest<TestModel> { public int SaveChange(TestModel model) { //EF Savechange this.AddLog(model); return 1; } protected override void AddLog<TModel>(TModel model) { //需要特別處理Log var specModel = model as TestModel; specModel.Name += "特別處理"; specModel.Mail += "特別處理"; Console.WriteLine(JsonConvert.SerializeObject(model)); } } public class TestBase { protected virtual void AddLog<TModel>(TModel model) { Console.WriteLine(JsonConvert.SerializeObject(model)); } } }這邊就是把SaveChange再拉出一層做一些包裝
使用者依然是無腦的使用SaveChange寫入資料
但是裡面的SaveChange會再去呼叫AddLog
每個類別可以對AddLog覆寫實作,已達到客戶的各種客製化寫Log
不知道有沒有更好的想法