C/S中的MVC(1)
思路是这样的:用一个DataSet代替B/S中的HttpContext,用工厂模式写一个类来实现BN层与WEB层的对应。
这样,是不是有点像MVC了。
下面是代码:
using System;
using System.Data;
using Business;
namespace Business.Base
{
/// <summary>
/// Description:窗体基类的公用函数类。
/// 本类提供窗体基类所需要的一些方法,例如
/// 写入,读取DataSet中的数据等
/// </summary>
public class FormCommonBN
{
/// <summary>
/// 存储数据的DataSet表的名称。
/// </summary>
public const string DTNAME = "Meta";
/// <summary>
/// 当前窗体名称列。
/// </summary>
public const string FORMNAME = "FormName";
/// <summary>
/// Description:默认构造函数。
/// </summary>
private FormCommonBN()
{
}
/// <summary>
/// Description:从DataSet中取得DataTable。
/// </summary>
/// <param name="ds">存储数据的DataSet</param>
/// <param name="key">列名称</param>
/// <returns>DataTable</returns>
public static DataTable GetDataTable(DataSet ds, string key)
{
if ((ds.Tables[DTNAME] == null)
|| ds.Tables[DTNAME].Rows.Count <= 0)
{
throw new Exception("没有您所需要的数据。");
}
return (DataTable)ds.Tables[FormCommonBN.DTNAME].Rows[0][key];
}
/// <summary>
/// Description:从DataSet中取得值。
/// </summary>
/// <param name="ds">存储数据的DataSet</param>
/// <param name="key">列名称</param>
/// <returns>取得的值</returns>
public static object GetData(DataSet ds, string key)
{
if ((ds.Tables[DTNAME] == null)
|| ds.Tables[DTNAME].Rows.Count <= 0)
{
throw new Exception("没有您所需要的数据。");
}
return ds.Tables[FormCommonBN.DTNAME].Rows[0][key];
}
/// <summary>
/// Description:从DataSet中取得字符串。
/// </summary>
/// <param name="ds">存储数据的DataSet</param>
/// <param name="key">列名称</param>
/// <returns>取得的值</returns>
public static string GetDataToString(DataSet ds, string key)
{
object obj = GetData(ds, key);
if (obj == null)
{
return "";
}
else
{
return obj.ToString();
}
}
/// <summary>
/// Description:从DataSet中取得整数。
/// </summary>
/// <param name="ds">存储数据的DataSet</param>
/// <param name="key">列名称</param>
/// <returns>取得的值</returns>
public static int GetDataToInt32(DataSet ds, string key)
{
object obj = GetData(ds, key);
if (obj == null)
{
throw new Exception("程序中用到的某个参数没有赋值。");
}
return Convert.ToInt32(obj);
}
/// <summary>
/// Dascription:设置DataSet中的DataTable。
/// </summary>
/// <param name="ds">存储数据的DataSet</param>
/// <param name="dt">DataTable</param>
/// <param name="key">列名称</param>
public static void SetData(DataSet ds, DataTable dt, string key)
{
if ((ds.Tables[FormCommonBN.DTNAME] == null)
|| ds.Tables[DTNAME].Rows.Count <= 0)
{
throw new Exception("没有您所需要的数据。");
}
ds.Tables["Meta"].Rows[0][key] = dt;
}
/// <summary>
/// Dascription:设置DataSet中的值。
/// </summary>
/// <param name="ds">存储数据的DataSet</param>
/// <param name="Value">设置的值</param>
/// <param name="key">列名称</param>
public static void SetData(DataSet ds, object Value, string key)
{
if ((ds.Tables[FormCommonBN.DTNAME] == null)
|| ds.Tables[DTNAME].Rows.Count <= 0)
{
throw new Exception("没有您所需要的数据。");
}
ds.Tables["Meta"].Rows[0][key] = Value;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构