Často jsem v situaci, kdy potřbuju napsat nějakou funkcionalitu. Řekněme, že budu chtít udělat funkcionalitu, která rozdělí 100GB XML na disku na menší XML.
Je jasné, že na toto udělám zvláštní třídu. Ale co už není jasné je, jestli ji udělat stavovou nebo bezestavovou. Např.:
Stavová třída by mohla vypadat takto:
class XMLSplitter {
public XMLSplitter(string inputXMLPath, int size) {}
public IEnumerator<string> getXMLPart() { yield return; }
}
Bezestavová třída takto:
class XMLSplitter {
public XMLSplitter() {}
public IEnumerator<string> getXMLPart(string inputXMLPath, int size) { yield return; }
}
Jenže to už bych mohl rovnou udělat statickou:
static class XMLSplitter {
public static IEnumerator<string> getXMLPart(string inputXMLPath, int size) { yield return; }
}
Stavová verze třídy má problém s tím, že se v ní bude muset resetovat stav při každém opuštění metody getXMLPart(). Navíc, stavovou verzi nelze použít ve více vláknech. Nestavová nebo statická verze tímto problémem netrpí, ale zase trpí tím, že si nemůžu definovat globální proměnné a do každé pomocné metody, kterou budu volat, budu muset propagovat parametry, které by mohly být součástí třídních atributů. To mi příjde, že vizuálně zhoršuje čitelnost kódu.
Tak jak s takovou situací naložit, nějaké návrhy?