Client code configuring the library service in several ways
The complete source of commonDesignPatterns_client.ek9, compiled by the EK9 compiler. Shown on commonDesignPatterns.html.
#!ek9 defines module site.commonDesignPatterns.client references site.commonDesignPatterns.library::applyConfigurations site.commonDesignPatterns.library::conditionallyApplyConfiguration site.commonDesignPatterns.library::ConfigurationDetails site.commonDesignPatterns.library::SomeConfigurableService defines function testAPlainConfiguration() as pure someServer <- SomeConfigurableService() someServer.underTakeServiceOperations() asConfigured <- someServer.configurationDetails() require asConfigured? withSpecificValues() as pure -> details as ConfigurationDetails details.name :=? "Specific Value" details.useMapping :=? false details.frequencyOfChecks :=? 21 testABespokePureConfiguration1() as pure someServer <- SomeConfigurableService(conditionallyApplyConfiguration(withSpecificValues)) someServer.underTakeServiceOperations() asConfigured <- someServer.configurationDetails() require asConfigured? defines function withSpecificName() -> details as ConfigurationDetails details.name: "specific" enableMapping() -> details as ConfigurationDetails details.useMapping: true testAFlexibleBespokeConfiguration() someServer <- SomeConfigurableService( applyConfigurations( [ withSpecificName, enableMapping ] ) ) someServer.underTakeServiceOperations() asConfigured <- someServer.configurationDetails() require asConfigured? testACopyAndInitialisePureConfiguration() as pure specifics <- () is Consumer of ConfigurationDetails as pure function t.name :=? "Retained Value" t.useMapping :=? false configuration <- ConfigurationDetails() configuration.name :=? "Ignored Value" configuration.frequencyOfChecks :=? 16 someServer <- SomeConfigurableService(ConfigurationDetails(specifics, configuration)) someServer.underTakeServiceOperations() asConfigured <- someServer.configurationDetails() //asConfigured would be 'name = "Retained Value", useMapping = false, frequencyOfChecks = 16' require asConfigured? defines program ConfigureTheService() testAPlainConfiguration() testABespokePureConfiguration1() testAFlexibleBespokeConfiguration() testACopyAndInitialisePureConfiguration()
Download commonDesignPatterns_client.ek9
Output
Processing Service operation for default Processing Service frequency 6 Processing Service operation for Specific Value Processing Service frequency 21 Processing Service operation for specific Will use mapping Processing Service frequency 6 Processing Service operation for Retained Value Processing Service frequency 16