Due to the continuously changing environment of service-based applications (SBAs), the ability to adapt to environmental and contextual changes has become a crucial characteristic of such applications. Providing SBAs with this ability is a complex task, usually carried out in an unsystematic way and interwoven with application logic. As a result, developing and maintaining adaptive SBAs has become a costly and hardly repeatable process. The objective of this paper is to present a model-based approach to developing adaptive SBAs which separates development of adaptation concerns from development of SBAs behaviors. This approach aims to facilitate and improve the development of adaptive behaviors. In this paper, the process of developing an adaptive SBA is defined as specifying adaptive SBA models based on a metamodel and reusable adaptation tactics. These models are then transformed into runtime model artifacts and running system units performing runtime adaptive behaviors. The approach introduces a systematic method to derive adaptation behaviors from adaptation models, which facilitates the development of adaptive behaviors. The empirical evaluations in three studies show that our approach enhances the development of adaptive behaviors in terms of identifying more proper adaptation plans, reducing the development time, and increasing understandability, modifiability, and correctness of code.