c# - 如何将我的代码分成各自独立的类?
问题描述
如何将我的代码分成它们自己的类并且仍然具有相同的功能?这就是我的代码目前的样子。
using System;
using System.Collections.Generic;
using System.Xml;
using XCENT.JobServer.JobPlugIn;
using System.IO;
using HPD.API.Utility.DataAccess;
namespace DataPurge
{
public class Purge : IJob, IJobControl {
public IJobControl JobControl { get { return ( this ); } }
public int MaxInstanceCount { get { return 1; } }
public string Name { get { return "DataPurge"; } }
public Purge() { }
public void Run( string XmlFragment ) {
XmlNode xmlNode = null;
try
{
xmlNode = Common.ConstructXmlNodeFromString(XmlFragment, "Params");
var list = DataList();
foreach (var item in list)
{
var factory = new PurgerFactory(item);
IPurger purge = factory.Purger;
purge.Purge();
purge = null;
factory = null;
}
}
catch (Exception ex)
{
throw;
}
}
public interface IPurger
{
void Purge();
}
public enum PurgeType
{
File,
Database,
}
public class FilePurger : IPurger
{
private Parameters parameter;
public FilePurger(Parameters parameter)
{
this.parameter = parameter;
}
public void Purge()
{
var files = new DirectoryInfo(parameter.FilePath).GetFiles();
foreach (var file in files)
{
if (DateTime.Now - file.CreationTime > TimeSpan.FromDays(7))
{
File.Delete(file.FullName);
}
}
}
}
public class DbPurger : IPurger
{
private Parameters parameter;
public DbPurger(Parameters parameter)
{
this.parameter = parameter;
}
public void Purge()
{
var access = new SqlDataAccess();
var sqlParams = new Dictionary<string, object>();
sqlParams.Add("@OlderThanDays", parameter.OlderThanDays);
access.ExecuteNonQuery(parameter.CString, parameter.SPName, sqlParams, 30, false);
}
}
private List<Parameters> DataList()
{
var sqlParams = new SqlDataAccess();
var list = sqlParams.GetDataTableAsList<Parameters>("Data Source = MYSERVER; Initial Catalog = MYDATABASE; User ID = UID; Password = PASSWORD;", "purge.spoDataTable", null);
return list;
}
public class PurgerFactory
{
public IPurger Purger { get; set; }
public PurgerFactory(Parameters parameter)
{
PurgeType type = (PurgeType)Enum.Parse(typeof(PurgeType), parameter.PurgeType);
switch (type)
{
case PurgeType.File:
Purger = new FilePurger(parameter);
break;
case PurgeType.Database:
Purger = new DbPurger(parameter);
break;
default:
throw new NotImplementedException();
}
}
}
/// <summary>
/// Used to submit a job via the job monitor
/// </summary>
public XmlNode JobXMLNode => Common.ConstructXmlNodeFromString("" +
"<JobParams>" +
" <Param Name=\"InfrastructureAPI\" DataType=\"String\">" +
" <Description>Infrastructure API URL.</Description>" +
" </Param>" +
" <Param Name=\"EnvironmentName\" DataType=\"String\">" +
" <Description>The current environment.</Description>" +
" </Param>" +
"</JobParams>",
"JobParams");
}
}
目前,程序的所有部分都被塞进了这一类。我想将它们分成各自独立的类,以使代码更简洁,但仍然具有相同的功能。我仍然是初学者,不知道从哪里开始。任何帮助将非常感激!
解决方案
您应该IPurger.cs
为接口创建一个文件IPurger
,然后FilePurger.cs
为类创建一个文件,为类FilePurger
创建一个文件,最后为类DbPurger.cs
创建一个文件。DbPurger
PurgerFactory.cs
PurgerFactory
那应该可以很好地清理您的代码。
如果从多个地方使用该枚举,您可能也希望将它放在自己的类中,也许是通用的Enums.cs
.
推荐阅读
- rest - 如何在不使用 saml2=disabled 的情况下在 Postman 客户端中执行启用 saml 的 url?
- jquery - 有没有更有效的方法来在页面加载和调整大小时运行它?
- javascript - 在数组Javascript中查找下一个素数
- python - 为什么使用光栅化保存为 .eps 的 matplotlib 图的文件大小会爆炸?
- python - 在 python 3 中安装 setuptools 时出错
- mysql - 重置 MYSQL 根密码 - ubuntu
- sql - 使用 XMLTABLE 视图时出现“ORA-03113:通信文件结束”
- sql-update - Redshift - 更新 Redshift DB 中的特定列
- java - 当我添加新的存储库和服务时,Spring Framework bean 工厂不满意
- java - 在 snappy 数据中通过 java 插入 json 对象时出错