Should I split class or keep it all in one? Currently, in my project I have one class that is dedicated to the all of the queries for the IBM i and converts it into usable models for my .NET code. There is already 12 methods in this class and there will be many, many more to come. This is for a tool that pulls data from our IBM i and pushes it to our internet database server.

Should I split this class up? Should I make it a partial class and put the code across multiple files? Should I do multiple classes?

Just wondering what the best practice is on something like that.

Currently this is the framework I have in place

class IbmIDatabase
{
    private DateTime ZERO_DATE = new DateTime(1900, 1, 1, 0, 0, 0);
    private string _connString = String.Empty;
    SystemCodeRepository scr = new SystemCodeRepository();

    /// &lt;summary&gt;
    /// Initializes a new instance of the &lt;see cref="IbmIDatabase"/&gt; class.
    /// &lt;/summary&gt;
    public IbmIDatabase()
    {
    }

    #region System Codes
    /// &lt;summary&gt;
    /// Gets all system codes.
    /// &lt;/summary&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public IEnumerable&lt;SystemCode&gt; GetAllSystemCodes()
    {
    }
    #endregion System Codes

    #region Citations
    /// &lt;summary&gt;
    /// Gets all citations.
    /// &lt;/summary&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public IEnumerable&lt;ParkingTicket&gt; GetAllCitations()
    {
    }
    #endregion Citations

    #region Queue
    /// &lt;summary&gt;
    /// Gets the queued records.
    /// &lt;/summary&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public IEnumerable&lt;QueuedRecord&gt; GetQueuedRecords()
    {
    }

    /// &lt;summary&gt;
    /// Marks the queue as processed.
    /// &lt;/summary&gt;
    /// &lt;param name="id"&gt;The id.&lt;/param&gt;
    public void MarkQueueAsProcessed(int id)
    {
    #endregion Queue

    #region Utility Bill Customer
    /// &lt;summary&gt;
    /// Gets the utility bill customer.
    /// &lt;/summary&gt;
    /// &lt;param name="id"&gt;The customer id.&lt;/param&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public Customer GetUtilityBillCustomer(int id)
    {
    }

    /// &lt;summary&gt;
    /// Gets the utility bill customer.
    /// &lt;/summary&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public IQueryable&lt;Customer&gt; GetUtilityBillCustomer()
    {
    }
    #endregion

    #region Utility Bill Details
    /// &lt;summary&gt;
    /// Gets the customer history.
    /// &lt;/summary&gt;
    /// &lt;param name="id"&gt;CustomerId&lt;/param&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public IQueryable&lt;BillHistory&gt; GetCustomerHistory(int id)
    {
    }

    /// &lt;summary&gt;
    /// Gets the customer history.
    /// &lt;/summary&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public IQueryable&lt;BillHistory&gt; GetCustomerHistory()
    {
    }
    #endregion

    #region Utility Bill Payment Details
    /// &lt;summary&gt;
    /// Gets the customer payment history.
    /// &lt;/summary&gt;
    /// &lt;param name="id"&gt;The id.&lt;/param&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public IQueryable&lt;BillPaymentHistory&gt; GetCustomerPaymentHistory(int id)
    {
    }

    /// &lt;summary&gt;
    /// Gets the customer payment history.
    /// &lt;/summary&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public IQueryable&lt;BillPaymentHistory&gt; GetCustomerPaymentHistory()
    {
    }
    #endregion

    #region Utility Bill Summary
    /// &lt;summary&gt;
    /// Gets the customer summary.
    /// &lt;/summary&gt;
    /// &lt;param name="id"&gt;CustomerId&lt;/param&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public IEnumerable&lt;BillSummary&gt; GetCustomerSummary(int id)
    {
    }

    /// &lt;summary&gt;
    /// Gets the customer summary.
    /// &lt;/summary&gt;
    /// &lt;returns&gt;&lt;/returns&gt;
    public IQueryable&lt;BillSummary&gt; GetCustomerSummary()
    {
    }
    #endregion
}


Within each method can be quite a few lines of code (up to many 100 or so?). I left one of the longest ones so far in the sample code.
This class has a well defined role and by keeping it intact you are satisfying the Single Responsibility Principle. So, I would leave it like that. Perhaps you might want to look into how you could refactor some common code out of each method and into a separate utility class, but that's all.