Я пытаюсь реорганизовать метод, который анализирует файл. Для поддержки файлов произвольного размера используется метод с использованием фиксированного буфера.Использовать анонимный метод, чтобы избежать создания одноразового объекта?
public int Parse()
{
// Get the initial chunk of data
ReadNextChunk();
while (lengthOfDataInBuffer > 0)
{
[parse through contents of buffer]
if (buffer_is_about_to_underflow)
ReadNextChunk();
}
return result;
}
Псевдокод выше, является частью единственной общественной нестатической методы в классе (кроме конструктора). Класс существует только для того, чтобы инкапсулировать состояние, которое нужно отслеживать при анализе через файл. Кроме того, как только этот метод был вызван классом, он не может/не должен быть вызван снова. Таким образом, шаблон использования выглядит так:
var obj = new MyClass(filenameToParse);
var result = obj.Parse();
// Never use 'obj' instance again after this.
Это меня почему-то вызывает. Я мог бы сделать конструктор MyClass закрытым, изменить Parse на статический метод и использовать метод Parse для экземпляра Parse, привязанного к методу. Это дало бы схему использования, как показано ниже:
var result = MyClass.Parse(filenameToParse);
MyClass не является статическим классом; Мне все еще нужно создать локальный экземпляр в методе Parse.
Поскольку этот класс имеет только два метода; Parse и (private) ReadNextChunk, мне интересно, может ли быть чище писать Parse как один статический метод, введя логику ReadNextChunk в Parse как анонимный метод. Остальное состояние можно отследить как локальные переменные вместо переменных-членов.
Конечно, я мог бы сделать что-то подобное, сделав ReadNextChunk статическим методом, а затем передав весь контекст, но я помню, что методы anon имели доступ к внешней области.
Это странный и уродливый или разумный подход?
Почему бы не анонимным ТИП? – SimpleVar
Если метод статический, то как вы собираетесь писать для него единичные тесты? Вы тесно связываете файловую систему с вашим парсером. – Romoku
@Romoku Точно так же вы пишете модульные тесты для любых других методов. Это только насмехается над тем, что это сложнее со статическими методами, и если никогда не будет причин издеваться над ним, это не проблема. Я бы сказал, что создание экземпляра, который фактически не держится ни в каком полезном состоянии, будет недостатком дизайна; если метод не нуждается в каком-либо состоянии, он должен быть статическим. Кроме того, заголовок вводит в заблуждение. В теле вопроса ничего не говорится об анонимном, это просто вопрос статического вопроса. – Servy