首页 > 解决方案 > 如何将我的代码分成各自独立的类?

问题描述

如何将我的代码分成它们自己的类并且仍然具有相同的功能?这就是我的代码目前的样子。

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");

    }
}

目前,程序的所有部分都被塞进了这一类。我想将它们分成各自独立的类,以使代码更简洁,但仍然具有相同的功能。我仍然是初学者,不知道从哪里开始。任何帮助将非常感激!

标签: c#visual-studioclassconsole-application

解决方案


您应该IPurger.cs为接口创建一个文件IPurger,然后FilePurger.cs为类创建一个文件,为类FilePurger创建一个文件,最后为类DbPurger.cs创建一个文件。DbPurgerPurgerFactory.csPurgerFactory

那应该可以很好地清理您的代码。

如果从多个地方使用该枚举,您可能也希望将它放在自己的类中,也许是通用的Enums.cs.


推荐阅读