一些设计思想的汇集(2)
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
關(guān)于畫面內(nèi)容的check的設(shè)計(jì)
首先定義接口
public interface IValidator {
??? void Validate(object value);
}
及虛類
public abstract class AbstractValidator {
??? private string errorMessage;
??? public string ErrorMessage {
??????? get { return errorMessage; }
??????? set { errorMessage = value; }
??? }
??? protected bool IsEmptyString(object obj) {
??????? if (obj == null || obj.ToString() == string.Empty) {
??????????? return true;
??????? } else {
??????????? return false;
??????? }
??? }
??? public AbstractValidator() {
??????? return;
??? }
}
然后定義各個(gè)具體的check類,比如只能輸入半角英數(shù)字的check
public class AlphabetAndNumberValiator : AbstractValidator, IValidator {
??? public void Validate(Object value) {
??????? Regex regex = new Regex(@"[a-zA-Z0-9]");
??????? if (!regex.IsMatch(value.ToString())) {
??????????? throw new ValidatorException(this.ErrorMessage);
??????? }
??? }
??? public AlphabetAndNumberValiator() {
??????? this.ErrorMessage = "請輸入半角英數(shù)字";
??? }
}?
最后定義容器
public class ActiveValidator {
??? private ErrorProvider errorProvider;
??? private Dictionary<Control, List<IValidator>> dic = new Dictionary<Control, List<IValidator>>();
??? private bool isAutoAddEventHandler = true;
??? public bool IsAutoAddEventHandler {
??????? get { return isAutoAddEventHandler; }
??????? set { isAutoAddEventHandler = value; }
??? }
??? public void AddValidator(Control control, IValidator validator) {
??????? if (dic.ContainsKey(control)) {
??????????? if (dic[control].Contains(validator) == false) {
??????????????? dic[control].Add(validator);
??????????? }
??????? } else {
??????????? List<IValidator> list = new List<IValidator>();
??????????? list.Add(validator);
??????????? dic.Add(control, list);
??????????? control.Validating += new CancelEventHandler(this.DoValidation);
??????? }
??? }
??? public bool DoAllValidation() {
??????? this.errorProvider.Clear();
??????? bool ret = false;
??????? foreach (Control control in dic.Keys) {
??????????? foreach (IValidator validator in dic[control]) {
??????????????? try {
??????????????????? validator.Validate(control.Text);
??????????????? } catch (ValidatorException ex) {
??????????????????? this.errorProvider.SetError(control, ex.Message);
??????????????????? ret = true;
??????????????? }
??????????? }
??????? }
??????? return ret;
??? }
??? private void DoValidation(object sender, EventArgs e) {
??????? if (this.isAutoAddEventHandler) {
??????????? this.errorProvider.Clear();
??????????? Control control;
??????????? if (sender is Control) {
??????????????? control = (Control)sender;
??????????? } else {
??????????????? return;
??????????? }
??????????? List<IValidator> list;
??????????? if (dic.ContainsKey(control)) {
??????????????? list = dic[control];
??????????? } else {
??????????????? return;
??????????? }
??????????? foreach (IValidator validator in list) {
??????????????? try {
??????????????????? validator.Validate(control.Text);
??????????????? } catch (ValidatorException ex) {
??????????????????? this.errorProvider.SetError(control, ex.Message);
??????????????????? // TODO
??????????????? }
??????????? }
??????? }
??? }
??? public ActiveValidator(ErrorProvider errorProvider) {
??????? this.errorProvider = errorProvider;
??? }
}
?
畫面類追加例
??????????? this.validator = new ActiveValidator(this.errorProvider);
??????????? this.validator.AddValidator(this.TextBox1, new AlphabetAndNumberValiator());
同時(shí),在提交button的click事件中,也可以調(diào)用this.validator.DoAllValidation(),做全畫面注冊控件的check.
轉(zhuǎn)載于:https://my.oschina.net/cjkall/blog/195903
總結(jié)
以上是生活随笔為你收集整理的一些设计思想的汇集(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件架构自学笔记--大学学的软件工程为什
- 下一篇: POJ 1150 The Last No