На мой взгляд, вы смотрите на метод, который возвращает коллекцию отфильтрованного журнала, а не класс коллекции, обертывающий вашу бизнес-логику. Вот так:
class SpecialArray<T>
{
[...]
public IEnumerable<T> Filter()
{
// validate inputs
// filter and validate logs in collection
// in end, return filtered logs, as an enumerable
}
[...]
}
Однако, похоже, что вы действительно хотите отделить бизнес-логику, отвечающую за фильтрацию журналов, от класса SpecialArray
, возможно, потому что вы чувствуете, что логика касается многих вещей, которые на самом деле не касаются SpecialArray
или потому что Filter
не распространяется на все общие случаи SpecialArray
.
В этом случае мое предложение будет заключаться в том, чтобы изолировать вашу бизнес-логику в другой namespace
, возможно, той, которая использует и / или требует другие компоненты для применения указанной бизнес-логики, и конкретно предлагает вашу функциональность в качестве метода расширения:
namespace MyNamespace.Collections
{
public class SpecialArray<T>
{
// Shenanigans
}
}
namespace MyNamespace.BusinessLogic.Filtering
{
public static class SpecialArrayExtensions
{
public static IEnumerable<T> Filter<T>(this SpecialArray<T> array)
{
// validate inputs
// filter and validate logs in collection
// in end, return filtered logs, as an enumerable
}
}
}
И когда вам нужно использовать эту бизнес-логику, она будет выглядеть так:
using MyNamespace.Collections; // to use SpecialArray
using MyNamespace.BusinessLogic.Filtering; // to use custom log filtering business logic
namespace MyNamespace
{
public static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main2()
{
SpecialArray<Logs> logs;
var filteredLogs = logs.Filter();
}
}
}