In Software Engineering, which architectural pattern is characterized by separating an application into three main logical components: data, user interface, and user input control?