@hirthwork

Тег enterprise в блоге hirthwork

hirthwork

на полном серьёзе хотел сейчас добавить в рабочий проект класс StatusCheckingAsyncResponseConsumerGeneratorFactory, но подумал что сначала попытаюсь обойтись имеющимися средствами

hirthwork

Как пишет класс конфига типичный плюсобог:

struct http_server_config {
    uint16_t port;
    std::string log_dir;
}
...
http_server_config config;
config_stream >> config.log_dir;
config.port = atoi(config.log_dir.substring(config.log_dir.find('=') + 2));
config_stream >> config.log_dir;
config.log_dir.erase(0, config.log_dir.find('=') + 2)
...
http_server::http_server(const http_server_config& config) {
...

Как пишет класс конфига типичная тырпрайзная жаваблядь:

interface HttpServerConfig<T, E> {
    int port();
    String logDir();
    T build() throws E;
}

class ImmutableHttpServerConfig
    implements HttpServerConfig<HttpServer, IOException>
{
    private final int port;
    private final String logDir;

    public ImmutableHttpServerConfig(final HttpServerConfig<
        ? extends ImmutableHttpServerConfig, ? extends ConfigException> config)
        throws ConfigException
    {
        port = config.port();
        if (logDir.isEmpty()) {
            throw new ConfigException("Log dir is empty");
        }
        logDir = config.logDir();
    }

    @Override
    public int port() {
        return port;
    }

    @Override
    public String logDir() {
        return logDir;
    }

    @Override
    public HttpServer build() throws IOException {
        return new HttpServer(this);
    }
}

class HttpServerConfigBuilder
    implements HttpServerConfig<ImmutableHttpServerConfig, ConfigException>
{
    private int port = 0;
    private String logDir = "";

    @Override
    public int port() {
        return port;
    }

    public HttpServerConfigBuilder port(final int port) {
        this.port = port;
        return this;
    }

    @Override
    public String logDir() {
        return logDir;
    }

    public HttpServerConfigBuilder logDir(final String logDir) {
        this.logDir = logDir;
    }

    @Override
    public ImmutableHttpServerConfig build() throws ConfigException {
        return new ImmutableHttpServerConfig(this);
    }
}

public IniHttpServerConfigBuilder extends HttpServerConfigBuilder {
    public IniHttpServerConfigBuilder(final IniConfig config)
        throws ConfigException
    {
        port(config.get("port", NonNegativeIntChecker.INSTANCE))
        logDir(config.get("log-dir", NonEmptyStringChecker.INSTANCE));
    }
}

Вот так вот легко и непринуждённо мы нассали в ротешник здравому смыслу, но
зато на наш код теперь можно дрочить.

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.