簡體   English   中英

如何將我的代碼分成它們自己單獨的類?

[英]How do I separate my code into their own separate classes?

我如何將我的代碼分成它們自己的類,並且仍然具有相同的功能? 這是目前我的代碼的樣子。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM