Home > Article > Backend Development > Software Architecture Using Smart Architecture in PHP
I've wanted to write this article for a long time, but never had the time. This is not intended to tell you how to do it, I hope it can shed some light on how to develop a good, scalable web application.
I have been engaged in development for 2-3 years. Looking back at the programs I first made, I really don’t believe that I wrote them myself. Now my web development skills have been greatly improved, such as sourceForge (http:// sourceforge.net/) is one of my more mature works, and the code is divided into various classes and functions. The structure of the database is also very clear. Different parts of the site are independent from other parts.
However, this site is not perfect. If I have to write it again, I will make the HTML layer and database layer more clearly distinguished through objects or function libraries.
I found that many managers like to express their ideas in the form of charts, and I will also provide one here. The idea of this system is to separate your logic from the surface layer, which means that anything complex will be pushed down to the "API/data access layer".
For security check, update and other codes, you'd better not put them in the HTML layer. You should put these theoretical codes in the API layer. The HTML layer will just make simple function calls and return arrays, objects, or my favorite, database result sets.
In this picture, the HTML interface either directly calls the API layer, or calls an HTML tool library (such as generating pop-up windows, etc.), and those libraries can call the database through a database abstraction layer (so that you do not have to bind to some kind of database superior).
Basic points
For a smart system, there are the following basic points:
1. Database independent
2. Presentation layer independent
3. Easy to modify
4. Object-oriented or at least split into function library calls
These are what I thought of. In addition to the above mentioned, there must be other points, you can put them forward in the forum.
Let us discuss the above points in detail below:
1. Database independence
When you are designing, you may not know how heavy the burden is on your site. Therefore, you should remember that it cannot be bound to a lightweight database, such as MS Access or others. Therefore, you should consider scalability. If you change the database, you do not need to make too many changes, or even make any changes. This is ideal.
When using PHP, the function calls for various databases are different, and you need to code differently for the database you use. To change this situation, you can use a database abstraction layer such as PHPLib or a library developed by others.
2. Presentation layer independence
If you want to develop a really huge and complex application, you have to start thinking about the interface of the database, so that you can do a lot less copy and paste work. For example, you need to make your site WAP-enabled so that mobile phone users can access it. If your application is well designed, you only need to write a lightweight WAP presentation layer to call all your database access objects. However, if your application system is not well designed, you may need to rewrite it, so that You will need to maintain an HTML version and a WAP version at the same time.
For example, when developing the SourceForge site, we had a large number of users submitting their bugs, tasks, etc. Initially we designed it to be all done through the web interface. Later, under pressure from some people, we decided to use XML interface to display the database. We successfully separated the core logic of the site from the presentation layer. Currently, bug tracking and other tools on SourceForge use two different libraries - the HTML library class and the database class. The data class is responsible for checking whether the input value is valid and handling security detection, while the presentation layer just returns true or false based on success/failure. To simplify, this example will not be based on a perfect object model while I have to explain the base classes and how other objects extend these base classes. But I think this example can help you establish some concepts.
Example of HTML class
//Connect to database
require ("database.php");
//Commonly used HTML header/footer
require ("html.php");
//Data access library class
require ("bug_data.php");
echo site_header("Page Title");
echo "
Updating A Bug
";
if (bug_data_update($field1,$field2,$field3)) {
echo "
Update Failed!
";
} else {
echo "
Updated Bug Successfully
";
//Show global error string
echo $feedback;
}
echo site_footer();
?>
Example Data Access Lib
/**
* Control a bug in the update database
* Check data validity and security, and return true when successful,
* Return false when failed
*
*
*/
function bug_data_update ($field1,$field2,$field3) {
//Global string, return error
global $feedback;
//$field1 and $field2 are required
if (! $field1 || !$field2) {
$feedback="Field 1 And Field 2 Are Required";
return false;
}
//Confirm that the user has the right to update
if (!user_isadmin()) {
$feedback= "You Must Be An Admin To Update a Bug";
return false;
}
//The bug can now be updated
$result=db_query("UPDATE bug ".
"SET field2='$field2',".
"field3='$field3' ".
"WHERE");
//Now check whether your statement was executed successfully
if (!$result) {
//update failed
return false;
} else {
return true ;
}
}
?>
3. Easy to modify
Of course you will not use absolute URLs throughout the application, but I also ask to go further. The choice of color, element name, font and other possible options are best not absolute, they should be in a configuration file and include it on every page. The style of the site should also be self-contained - so you don't have to copy and paste it on every page, I usually put the HTML in a function that can then be called when needed.
Database passwords, database connections, etc. are also placed in the database abstraction layer.
4.Object-oriented/Functional
We can split process processing into different function calls. Each call does one thing, and sometimes you just need to call other functions and return the results.
A good example is checking in every page whether a user is logged in. If you don't use objects or functions, when your authentication system changes, you have to make changes on every page, rather than just changing a function call in the library. Before you write a piece of code, think about it. If it is going to be used more than once in the site, you will have to move it to a library. Anything to add?
I'm sure there are some things I haven't thought of, so please give me your thoughts. In particular, you have written a large and complex application. I would like to know what kind of system you would build and what changes you would make if you had to write it again.
The above introduces the software architecture and the use of smart architecture in PHP, including the content of software architecture. I hope it will be helpful to friends who are interested in PHP tutorials.