{'fraction_non_alphanumeric': 0.02948207171314741, 'fraction_numerical': 0.0031872509960159364, 'mean_word_length': 5.786486486486487, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 3, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Design Pattern Application : Pure-Generative Approach vs . Conservative-Generative Approach

Since their emergence, design patterns have been widely accepted by software practitioners. Their contribution covers the definition, the design, and the documentation of software. Design patterns describe solutions to recurrent architectural problems. Design patterns are meant to improve certain software quality characteristics. For example, the design patterns proposed in [Gamma95] are defined to improve the flexibility and the understandability characteristics of software quality. For our discussion we summarize software developments in two kinds: Development of large applications (such as accounting application or billing systems); and, development of large framework (such as window system [SunAWT] or networking system [Zweig90]). In one hand, when developing large applications, the developers need to abstract the functional and non-functional requirements of the application. They must be particularly careful with the specifications of the business rules and policies of the application, while the language and the code implementing the application are not really important. On the other hand, when developing large frameworks, the developers need to abstract the potential extension and implementations of the framework. They must be particularly careful with the architecture, the design, and the implementation of the framework, which is, at least, as important as the functionalities provided. In this position paper, we present two tools that help the developers in implementing large applications and large frameworks, using design patterns. Scriptor [Scriptor] (Section 2) is an industrial-strength application generator. Developers use it to generate large applications from scripts stating their functional and nonfunctional requirements. PatternsBox [PatternsBox] (Section 3) is an academic conservative application generator. Developers use it to implement design patterns in existing applications. PatternsBox modifies or creates only the required code artifacts (class, interface, fields, methods) to implement the design patterns, leaving the rest of the code untouched. In Section 4, we present the advantages and the limitations of the two approaches, and a comparison of these with respect to the use of design patterns. Finally, in Section 5, we conclude and present some future directions, which consist in combining the pure-generative and the conservative-generative approaches.