Mirko Stocker, O. Zimmermann, Uwe Zdun, Daniel Lübke, C. Pautasso
The design and evolution of Application Programming Interfaces (APIs) in microservices architectures is challenging. General design issues in integration and programming have been covered in great detail in many pattern languages since the beginnings of the patterns movement, and service-oriented infrastructure design patterns have also been published in the last decade. However, the interface representations (i.e., the content of message payloads) have received less attention. We presented five structural representation patterns in our previous work; in this paper we continue our coverage of the API design space and propose five interface quality patterns that deal with the observable aspects of quality-attribute-driven interface design for efficiency, security, and manageability: An API Key allows API providers to identify clients. Providers may offer rich data contracts in their responses, which not all consumers might need. A Wish List allows the client to request only the attributes in a response data set that it is interested in. If a client makes many API calls, the provider can employ a Rate Limit and bill clients according to a specified Rate Plan. A provider has to provide a high-quality service while at the same time having to use its available resources economically. The resulting compromise is expressed in a provider's Service Level Agreement.
{"title":"Interface Quality Patterns: Communicating and Improving the Quality of Microservices APIs","authors":"Mirko Stocker, O. Zimmermann, Uwe Zdun, Daniel Lübke, C. Pautasso","doi":"10.1145/3282308.3282319","DOIUrl":"https://doi.org/10.1145/3282308.3282319","url":null,"abstract":"The design and evolution of Application Programming Interfaces (APIs) in microservices architectures is challenging. General design issues in integration and programming have been covered in great detail in many pattern languages since the beginnings of the patterns movement, and service-oriented infrastructure design patterns have also been published in the last decade. However, the interface representations (i.e., the content of message payloads) have received less attention. We presented five structural representation patterns in our previous work; in this paper we continue our coverage of the API design space and propose five interface quality patterns that deal with the observable aspects of quality-attribute-driven interface design for efficiency, security, and manageability: An API Key allows API providers to identify clients. Providers may offer rich data contracts in their responses, which not all consumers might need. A Wish List allows the client to request only the attributes in a response data set that it is interested in. If a client makes many API calls, the provider can employ a Rate Limit and bill clients according to a specified Rate Plan. A provider has to provide a high-quality service while at the same time having to use its available resources economically. The resulting compromise is expressed in a provider's Service Level Agreement.","PeriodicalId":136534,"journal":{"name":"Proceedings of the 23rd European Conference on Pattern Languages of Programs","volume":"25 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2018-07-04","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"117083384","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Fog computing is an emergent approach that tries to overcome challenges the cloud faces by introducing a fog tier in between the cloud and the edge of the network. With the advent of the cloud, computing power shifted back again to centralized locations. In past decades, we have seen an alternation between centralization and decentralization. Although the cloud is highly scalable and performant, it exhibits limitations such as real-time capabilities. Fog computing is an approach that tries to overcome these shortcomings. The implementation guidelines for fog computing system are vague to be implemented in real-world applications. Smart objects at the edge benefit from low latency responses, location awareness, and higher availability provided by fog computing. In this paper, we present Fogxy, an architectural pattern for fog computing. It serves as an implementation guidance that describes a solution to a recurring problem in a given context. Fogxy is composed of different patterns and is based on the idea of the proxy pattern. Fogxy gives an overview of the implementation of fog computing applications and takes into account the integration of cloud computing and Internet of Things (IoT) technologies.
{"title":"Fogxy","authors":"Andreas Seitz, Felix Thiele, Bernd Bruegge","doi":"10.1145/3282308.3282342","DOIUrl":"https://doi.org/10.1145/3282308.3282342","url":null,"abstract":"Fog computing is an emergent approach that tries to overcome challenges the cloud faces by introducing a fog tier in between the cloud and the edge of the network. With the advent of the cloud, computing power shifted back again to centralized locations. In past decades, we have seen an alternation between centralization and decentralization. Although the cloud is highly scalable and performant, it exhibits limitations such as real-time capabilities. Fog computing is an approach that tries to overcome these shortcomings. The implementation guidelines for fog computing system are vague to be implemented in real-world applications. Smart objects at the edge benefit from low latency responses, location awareness, and higher availability provided by fog computing. In this paper, we present Fogxy, an architectural pattern for fog computing. It serves as an implementation guidance that describes a solution to a recurring problem in a given context. Fogxy is composed of different patterns and is based on the idea of the proxy pattern. Fogxy gives an overview of the implementation of fog computing applications and takes into account the integration of cloud computing and Internet of Things (IoT) technologies.","PeriodicalId":136534,"journal":{"name":"Proceedings of the 23rd European Conference on Pattern Languages of Programs","volume":"49 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2018-07-04","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121727968","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
This paper extends our Magic Backlog Patterns collection with three additional patterns for managing the work of a program- or rather how to deal with coordinating the work of projects which are part of a larger program and where there may be dependencies and shared deployment. While teams within a program may work fairly independently, their work still needs to be coordinated to produce a product. These three patterns, which represent alternative strategies for structuring the backlog of work, are introduced through a story of the correspondence of a business analyst as her hypothetical program moves through different backlog management strategies.
{"title":"A Program Backlog Story with Patterns: Expanding the Magic Backlog Pattern Collection","authors":"Lise B. Hvatum, R. Wirfs-Brock","doi":"10.1145/3282308.3282338","DOIUrl":"https://doi.org/10.1145/3282308.3282338","url":null,"abstract":"This paper extends our Magic Backlog Patterns collection with three additional patterns for managing the work of a program- or rather how to deal with coordinating the work of projects which are part of a larger program and where there may be dependencies and shared deployment. While teams within a program may work fairly independently, their work still needs to be coordinated to produce a product. These three patterns, which represent alternative strategies for structuring the backlog of work, are introduced through a story of the correspondence of a business analyst as her hypothetical program moves through different backlog management strategies.","PeriodicalId":136534,"journal":{"name":"Proceedings of the 23rd European Conference on Pattern Languages of Programs","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2018-07-04","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129417795","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Searching is one of the fundamental tasks in Computer Science. An intuitive way to search is to do it linearly, that is, start at the beginning of the dataset and continue till the searched-for item is found or nothing is found. However, as the volume of data increases, the response time of linear search is no longer acceptable. Indexes are designed to search through massive datasets quickly. There are a number of different ways of building complex and advanced indexes. Appropriate selection and modification of indexing structures according to dynamic business requirements is crucial for data-intensive applications. In this work, we present a few basic reusable indexing structures. These structures can be used to create advanced and complex indexing structures with lesser effort and time.
{"title":"Patterns for Indexing Large Datasets","authors":"Garima Gaur, S. Kalra, Arnab Bhattacharya","doi":"10.1145/3282308.3282314","DOIUrl":"https://doi.org/10.1145/3282308.3282314","url":null,"abstract":"Searching is one of the fundamental tasks in Computer Science. An intuitive way to search is to do it linearly, that is, start at the beginning of the dataset and continue till the searched-for item is found or nothing is found. However, as the volume of data increases, the response time of linear search is no longer acceptable. Indexes are designed to search through massive datasets quickly. There are a number of different ways of building complex and advanced indexes. Appropriate selection and modification of indexing structures according to dynamic business requirements is crucial for data-intensive applications. In this work, we present a few basic reusable indexing structures. These structures can be used to create advanced and complex indexing structures with lesser effort and time.","PeriodicalId":136534,"journal":{"name":"Proceedings of the 23rd European Conference on Pattern Languages of Programs","volume":"19 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2018-07-04","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130448949","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
This paper integrates previously published patterns (many of them documented by the author) for open source businesses through narratives. An open source business employs open source as a strategy to strengthen its business model. The paper makes three contributions: it links patterns by creating narratives of how they have been applied by different companies; it documents pattern sequences for each example; and it proposes a way to group the patterns that reflects how strategic open source is to a business.
{"title":"Business of Open Source: A Case Study of Integrating Existing Patterns Through Narratives","authors":"M. Weiss","doi":"10.1145/3282308.3282332","DOIUrl":"https://doi.org/10.1145/3282308.3282332","url":null,"abstract":"This paper integrates previously published patterns (many of them documented by the author) for open source businesses through narratives. An open source business employs open source as a strategy to strengthen its business model. The paper makes three contributions: it links patterns by creating narratives of how they have been applied by different companies; it documents pattern sequences for each example; and it proposes a way to group the patterns that reflects how strategic open source is to a business.","PeriodicalId":136534,"journal":{"name":"Proceedings of the 23rd European Conference on Pattern Languages of Programs","volume":"30 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2018-07-04","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114151115","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Tiago Boldt Sousa, H. Ferreira, F. F. Correia, Ademar Aguiar
Cloud software continues to expand globally, highly motivated by how widespread the Internet is and the possibilities it unlocks with cloud computing. Still, cloud development has some intrinsic properties to it, making it complex to unexperienced developers. This research is capturing those intricacies in the form of a pattern language that gathers ten patterns for engineering software for the cloud. This paper elaborates on that research by contributing with two new patterns: AUTOMATED RECOVERY, which checks if a container is working properly, automatically recovering it in case of failure and SCHEDULER, which periodically executes actions within the infrastructure. The described patterns are useful for anyone designing software for the cloud, either to bootstrap or to validate their design decisions with the end goal of enabling them to create better software for the cloud.
{"title":"Engineering Software for the Cloud: Automated Recovery and Scheduler","authors":"Tiago Boldt Sousa, H. Ferreira, F. F. Correia, Ademar Aguiar","doi":"10.1145/3282308.3282315","DOIUrl":"https://doi.org/10.1145/3282308.3282315","url":null,"abstract":"Cloud software continues to expand globally, highly motivated by how widespread the Internet is and the possibilities it unlocks with cloud computing. Still, cloud development has some intrinsic properties to it, making it complex to unexperienced developers. This research is capturing those intricacies in the form of a pattern language that gathers ten patterns for engineering software for the cloud. This paper elaborates on that research by contributing with two new patterns: AUTOMATED RECOVERY, which checks if a container is working properly, automatically recovering it in case of failure and SCHEDULER, which periodically executes actions within the infrastructure. The described patterns are useful for anyone designing software for the cloud, either to bootstrap or to validate their design decisions with the end goal of enabling them to create better software for the cloud.","PeriodicalId":136534,"journal":{"name":"Proceedings of the 23rd European Conference on Pattern Languages of Programs","volume":"55 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2018-07-04","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124946033","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Data type composition is used in programming languages to build complex data types (known as compound types) from simpler ones. Various programming languages of ten use common approaches to type composition, but their particular implementation and provided opportunities may differ between languages. The paper uses the patterns methodology to describe three recurring themes in data type composition: traversing a set of values (the Traversable Once pattern), providing a slot to assign a value (the Assignable Once pattern) and variables that do not have to contain a value (the Optional Value pattern). These patterns are general cases of a number of constructs used for building compound data types in various programming languages. The described patterns may be used by designers of programming languages, libraries and frameworks to support the corresponding data type composition mechanisms directly in the language or their replacement at a higher level. Users of languages, libraries and frameworks may use the description of the patterns to understand underlying mechanisms and related benefits and liabilities.
{"title":"Three Patterns of Data Type Composition in Programming Languages","authors":"R. Batdalov, O. Ņikiforova","doi":"10.1145/3282308.3282341","DOIUrl":"https://doi.org/10.1145/3282308.3282341","url":null,"abstract":"Data type composition is used in programming languages to build complex data types (known as compound types) from simpler ones. Various programming languages of ten use common approaches to type composition, but their particular implementation and provided opportunities may differ between languages. The paper uses the patterns methodology to describe three recurring themes in data type composition: traversing a set of values (the Traversable Once pattern), providing a slot to assign a value (the Assignable Once pattern) and variables that do not have to contain a value (the Optional Value pattern). These patterns are general cases of a number of constructs used for building compound data types in various programming languages. The described patterns may be used by designers of programming languages, libraries and frameworks to support the corresponding data type composition mechanisms directly in the language or their replacement at a higher level. Users of languages, libraries and frameworks may use the description of the patterns to understand underlying mechanisms and related benefits and liabilities.","PeriodicalId":136534,"journal":{"name":"Proceedings of the 23rd European Conference on Pattern Languages of Programs","volume":"30 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2018-07-04","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121758933","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
P. Inventado, Sharris Gayle Francisco Inventado, Noboru Matsuda, Yeping Li, P. Scupelli, Korinn S. Ostrow, N. Heffernan, S. Tu, C. Mason, Mary Logue, Patrick McGuire
Experienced teachers effectively address student misconceptions and learning difficulties by employing high-quality pedagogical strategies that they have developed through experience. It is difficult to discover effective strategies because it takes a lot of trial and error before a teacher can conclude that a particular approach improves student learning. Researchers have used educational design patterns to encapsulate high-quality strategies that facilitate the transfer of pedagogical knowledge. In this work, we investigated the feasibility of utilizing three educational design patterns as a teaching tool for math preservice teacher education: Feedback Sandwich, Pitfall Diagnosis and Prevention, and Worked Examples. Specifically, we used design patterns to investigate how preservice teachers provided feedback to students who gave common wrong answers to a given math problem and compared their feedback before and after they were introduced to educational design patterns. Results indicated that design patterns helped preservice teachers consider other aspects of feedback such as students' self-regard, common misconceptions, and prior knowledge into their feedback for common wrong answers on math problems. The limited set of three design patterns introduced in the study focused on feedback presentation. Results also indicated preservice teachers may benefit from design patterns that address other aspects of feedback such as content granularity, feedback length, and presentation medium. Implications of this study, including the potential of using educational design patterns to improve preservice teacher education, are discussed.
{"title":"Using Design Patterns for Math Preservice Teacher Education","authors":"P. Inventado, Sharris Gayle Francisco Inventado, Noboru Matsuda, Yeping Li, P. Scupelli, Korinn S. Ostrow, N. Heffernan, S. Tu, C. Mason, Mary Logue, Patrick McGuire","doi":"10.1145/3282308.3282340","DOIUrl":"https://doi.org/10.1145/3282308.3282340","url":null,"abstract":"Experienced teachers effectively address student misconceptions and learning difficulties by employing high-quality pedagogical strategies that they have developed through experience. It is difficult to discover effective strategies because it takes a lot of trial and error before a teacher can conclude that a particular approach improves student learning. Researchers have used educational design patterns to encapsulate high-quality strategies that facilitate the transfer of pedagogical knowledge. In this work, we investigated the feasibility of utilizing three educational design patterns as a teaching tool for math preservice teacher education: Feedback Sandwich, Pitfall Diagnosis and Prevention, and Worked Examples. Specifically, we used design patterns to investigate how preservice teachers provided feedback to students who gave common wrong answers to a given math problem and compared their feedback before and after they were introduced to educational design patterns. Results indicated that design patterns helped preservice teachers consider other aspects of feedback such as students' self-regard, common misconceptions, and prior knowledge into their feedback for common wrong answers on math problems. The limited set of three design patterns introduced in the study focused on feedback presentation. Results also indicated preservice teachers may benefit from design patterns that address other aspects of feedback such as content granularity, feedback length, and presentation medium. Implications of this study, including the potential of using educational design patterns to improve preservice teacher education, are discussed.","PeriodicalId":136534,"journal":{"name":"Proceedings of the 23rd European Conference on Pattern Languages of Programs","volume":"61 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2018-07-04","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"123778725","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Xiwei Xu, C. Pautasso, Liming Zhu, Q. Lu, I. Weber
Blockchain is an emerging technology that enables new forms of decentralized software architectures, where distributed components can reach agreements on shared system states without trusting a central integration point. Blockchain provides a shared infrastructure to execute programs, called smart contracts, and to store data. Since blockchain technologies are at an early stage, there is a lack of a systematic and holistic view on designing software systems that use blockchain. We view blockchain as part of a bigger system, which requires patterns for using blockchain in the design of their software architecture. In this paper, we collect a list of patterns for blockchain-based applications. The pattern collection is categorized into four types, including interaction with external world patterns, data management patterns, security patterns and contract structural patterns. Some patterns are designed considering the nature of blockchain and how it can be specifically introduced within real-world applications. Others are variants of existing design patterns applied in the context of blockchain-based applications and smart contracts.
{"title":"A Pattern Collection for Blockchain-based Applications","authors":"Xiwei Xu, C. Pautasso, Liming Zhu, Q. Lu, I. Weber","doi":"10.1145/3282308.3282312","DOIUrl":"https://doi.org/10.1145/3282308.3282312","url":null,"abstract":"Blockchain is an emerging technology that enables new forms of decentralized software architectures, where distributed components can reach agreements on shared system states without trusting a central integration point. Blockchain provides a shared infrastructure to execute programs, called smart contracts, and to store data. Since blockchain technologies are at an early stage, there is a lack of a systematic and holistic view on designing software systems that use blockchain. We view blockchain as part of a bigger system, which requires patterns for using blockchain in the design of their software architecture. In this paper, we collect a list of patterns for blockchain-based applications. The pattern collection is categorized into four types, including interaction with external world patterns, data management patterns, security patterns and contract structural patterns. Some patterns are designed considering the nature of blockchain and how it can be specifically introduced within real-world applications. Others are variants of existing design patterns applied in the context of blockchain-based applications and smart contracts.","PeriodicalId":136534,"journal":{"name":"Proceedings of the 23rd European Conference on Pattern Languages of Programs","volume":"396 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2018-07-04","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131679546","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
With multiple parallel running software development initiatives and products, the overview of what is going on has to be kept in sight to derive suitable architectural and technical decisions. In an environment without a proper decision-making process in several development teams, or without a clear definition of roles and responsibilities a centralized architecture board makes no sense. There is need of dedicated maturity steps to traverse through to reach the goal of a distributed realization environment with as few as possible bottlenecks due to mutual discussions with a centralized responsibility to gather knowledge about on goings even considering existing technical debts. This paper is worth considered by CTOs, chief or enterprise architects within greater software development organizations.
{"title":"Architecture Board: Extension to Architecture Management Overview paper on EuroPLoP'17","authors":"Victor Sauermann, Frank J. Frey, Michael Kopf","doi":"10.1145/3282308.3282328","DOIUrl":"https://doi.org/10.1145/3282308.3282328","url":null,"abstract":"With multiple parallel running software development initiatives and products, the overview of what is going on has to be kept in sight to derive suitable architectural and technical decisions. In an environment without a proper decision-making process in several development teams, or without a clear definition of roles and responsibilities a centralized architecture board makes no sense. There is need of dedicated maturity steps to traverse through to reach the goal of a distributed realization environment with as few as possible bottlenecks due to mutual discussions with a centralized responsibility to gather knowledge about on goings even considering existing technical debts. This paper is worth considered by CTOs, chief or enterprise architects within greater software development organizations.","PeriodicalId":136534,"journal":{"name":"Proceedings of the 23rd European Conference on Pattern Languages of Programs","volume":"37 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2018-07-04","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133386920","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}