非常不同的方法,我有一個客戶機/服務器體系結構的小框架,我在業務層使用此工具:實現一個跨領域驗證使用C#
DI = SimpleInjector
DynamicProxy截取=城堡。核心
現在我需要驗證一些驗證!例如看看這個方法:
public void DeleteFakeItem (Guid userId, Guid fakeItemId)
{
userAccountService.IsAuthorized(userId, FeatureIndex.DeleteFakeItem);
if (fakeItemId == Guid.EmptyGuid || userId == Guid.EmptyGuid)
throw new ArgumentNullException("parameters are not correct!");
if (!repo.IsFakeItemIsDeletable(fakeItemId))
throw new Exception("you can not delete this item!");
var fakeItem = repo.GetFakeItem(fakeItemId);
if (fakeItem == null)
throw new Exception("this fakeItem dose not exists!");
repo.DeleteActivityCenter(fakeItem);
}
,但是,我有很多的方法,我的方法是彼此非常不同的,所以在那裏解決?因爲我無法爲我的方法創建一個好的抽象。
我如何實現交叉切割功能來驗證我的參數?
我想我可以使用攔截器和屬性來做到這一點,例如像每個參數[Validate(ValidateEnum.NotNull)]
這樣的屬性。
什麼是正確的方法?
和我的實體的第二個問題: 我可以通過使用帶攔截器的反射來驗證基於它們的實體的流暢API驗證規則嗎?
例如我想要得到規則,如果有IsRequired()
規則,驗證爲非空。
我不想使用裝飾模式,因爲它使我重構很多;
這是一個非常,非常廣泛的問題,這可能不適合Stackoverflow。另外,雖然它可能會導致你重構很多,但對我來說,解決你的問題的方法是應用[此模式](https://cuttingedge.it/blogs/steven/pivot/entry.php?id=91)。 – Steven
@Steven哦上帝,你認真嗎?命令模式?我討厭它,我必須用這種模式編寫大量的代碼:(| tnx以供評論。爲懶惰開發人員尋求解決方案 – mohammadreza
所以你想改進你的設計,但不想重構它嗎?好與運氣:)。順便說一句,你可能誤解了那篇文章。文章並不描述命令模式,而是一種完全不同的模式,不管你是否喜歡,都能解決你在問題中描述的所有問題(以及更多)。 – Steven