Voglio capire diversi modi per oggettare le classi di progettazione. Ho tre classi diverse. Generalmente sto creando un parser di file.
Le classi:
- Dati cliente - che mostra il modello di dati del testo.
- Un parser di file, che preleva i dati dal file e li inserisce nell'elenco generico
- E lettore di cartelle, che eseguirà FileParse per tutti i file in una directory
Devo separare tutto in classi diverse, combinare le classi 1 e 2 o avere tutto in una classe unita per sotto. Qual è il metodo dell'architetto software? Se non c'è una risposta, quali requisiti o principi aziendali dovrei usare per prendere questa decisione? Penserei che "Principio della singola responsabilità" affermi che dovrebbero essere nella propria classe, o è solo per le funzioni?
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace ParseTest
{
public class Customer
{
public class CustomerData
{
// These are the column names in customerdata txt:
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public string CustomerState { get; set; }
public int ProductId { get; set; }
public int QuantityBought { get; set; }
}
public List<CustomerData> GetCustomer(string filename)
{
List<CustomerData> customerdata = new List<CustomerData>();
//const String CustomerBase = @"C:\Users\Desktop\ParseFile\sample.txt";
string CustomerBase = filename;
String fileToLoad = String.Format(CustomerBase);
using (StreamReader r = new StreamReader(fileToLoad))
{
string line;
while ((line = r.ReadLine()) != null)
{
string[] parts = line.Split(',');
// Skip the column names row
if (parts[0] == "id") continue;
CustomerData dbp = new CustomerData();
dbp.CustomerId = Convert.ToInt32(parts[0]);
dbp.CustomerName = parts[1];
dbp.CustomerState = parts[2];
dbp.ProductId = Convert.ToInt32(parts[3]);
dbp.QuantityBought = Convert.ToInt32(parts[4]);
customerdata.Add(dbp);
}
}
return customerdata;
}
public List<CustomerData> GetAllCustomer(string directoryname)
{
List<CustomerData> AllFileCustomerData = new List<CustomerData>();
foreach (string filename in Directory.EnumerateFiles(directoryname, "*.txt"))
{
List<CustomerData> customerdata = new List<CustomerData>();
customerdata = GetCustomer(filename);
AllFileCustomerData.AddRange(customerdata);
}
return AllFileCustomerData;
}
}
}