나는 오랫동안 이 글을 쓰고 싶었지만 시간이 없었습니다. 이 글은 여러분에게 어떻게 해야 하는지 알려주기 위한 것이 아니며, 훌륭하고 확장 가능한 웹 애플리케이션을 개발하는 방법에 대해 어느 정도 밝혀줄 수 있기를 바랍니다.
저는 2~3년 동안 개발에 종사했습니다. 처음 만들었던 프로그램을 되돌아보면, 이제 sourceForge와 같은 웹 개발 실력이 크게 향상되었습니다. http: //sourceforge.net/)은 나의 성숙한 작업 중 하나입니다. 코드는 다양한 클래스와 함수로 구분됩니다. 데이터베이스의 구조도 매우 명확합니다. 사이트의 다른 부분은 다른 부분과 독립적입니다.
하지만 이 사이트는 완벽하지 않습니다. 만약 다시 작성하게 된다면 HTML 레이어와 데이터베이스 레이어를 객체나 함수 라이브러리를 통해 좀 더 명확하게 구분하도록 하겠습니다.
많은 관리자들이 자신의 아이디어를 차트 형식으로 표현하는 것을 좋아한다는 것을 알게 되었는데, 여기서도 차트 형식으로 제공하겠습니다. 이 시스템의 아이디어는 논리를 표면 계층에서 분리하는 것입니다. 즉, 복잡한 모든 것이 "API/데이터 액세스 계층"으로 푸시된다는 의미입니다.
보안 점검, 업데이트 등의 코드는 HTML 레이어에 넣지 않는 것이 좋습니다. 이러한 이론적인 코드는 API 레이어에 넣어야 합니다. HTML 레이어는 간단한 함수 호출을 수행하고 배열, 개체 또는 내가 가장 좋아하는 데이터베이스 결과 집합을 반환합니다.
이 그림에서 HTML 인터페이스는 API 계층을 직접 호출하거나 HTML 도구 라이브러리(예: 팝업 창 생성 등)를 호출하고 해당 라이브러리는 데이터베이스 추상화 계층을 통해 데이터베이스를 호출할 수 있습니다(그래서 특정 데이터베이스에 바인딩할 필요가 없습니다).
기본 포인트
스마트 시스템을 위해서는 다음과 같은 기본 포인트가 있습니다.
1. 데이터베이스 독립적
2. 프리젠테이션 레이어 독립적
3. 수정이 용이
4. 객체 지향 또는 적어도 함수 라이브러리 호출로 분할
위에서 언급한 것 외에도 다른 사항이 있어야 한다고 생각합니다. 포럼에 게시할 수 있습니다.
위 사항에 대해 아래에서 자세히 논의하겠습니다.
1. 데이터베이스 독립성
디자인할 때 사이트에 얼마나 많은 부담이 있을지 모를 수 있으므로 MS Access나 기타 경량 데이터베이스에 바인딩할 수 없다는 점을 기억해야 합니다. 따라서 확장성을 고려해야 합니다. 데이터베이스를 변경하는 경우 너무 많은 변경을 수행하거나 변경할 필요도 없습니다.
PHP를 사용할 때 다양한 데이터베이스에 대한 함수 호출이 다르며, 사용하는 데이터베이스에 대해 다르게 코딩해야 합니다. 이러한 상황을 변경하려면 PHPLib 또는 다른 사람이 개발한 라이브러리와 같은 데이터베이스 추상화 계층을 사용할 수 있습니다.
2. 프리젠테이션 레이어 독립성
매우 크고 복잡한 애플리케이션을 개발하려면 데이터베이스 인터페이스 문제에 대해 생각해야 복사 및 붙여넣기 작업을 훨씬 줄일 수 있습니다. 예를 들어, 휴대폰 사용자가 액세스할 수 있도록 사이트를 WAP 지원으로 설정해야 합니다. 애플리케이션이 잘 설계되어 있으면 모든 데이터베이스 액세스 개체를 호출하기 위해 경량 WAP 프레젠테이션 계층만 작성하면 됩니다. 그러나 애플리케이션 시스템이 제대로 설계되지 않은 경우 이를 다시 작성해야 할 수 있으므로 유지 관리가 필요합니다. HTML 버전과 WAP 버전을 동시에 제공합니다.
예를 들어 SourceForge 사이트를 개발할 때 많은 사용자가 버그와 작업을 제출했습니다. 처음에는 웹 인터페이스를 통해 모든 작업이 수행되도록 설계했습니다. 나중에 일부 사람들의 압력을 받아 우리는 XML 인터페이스를 사용하여 데이터베이스를 표시하기로 결정했습니다. 우리는 사이트의 핵심 로직을 프리젠테이션 계층에서 성공적으로 분리했습니다. SourceForge의 현재 버그 추적 및 기타 도구는 HTML 라이브러리 클래스와 데이터베이스 클래스라는 두 가지 다른 라이브러리를 사용합니다. 데이터 클래스는 입력 값이 유효한지 확인하고 보안 감지를 처리하는 역할을 담당하는 반면 프레젠테이션 계층은 성공/실패에 따라 true 또는 false를 반환합니다. 단순화하기 위해 이 예제는 완벽한 개체 모델을 기반으로 하지 않으며 기본 클래스와 다른 개체가 이러한 기본 클래스를 확장하는 방법을 설명해야 합니다. 하지만 이 예는 몇 가지 개념을 확립하는 데 도움이 될 수 있다고 생각합니다.
HTML 클래스 예시
//데이터베이스 연결
require("database.php")
//일반적으로 사용되는 HTML 머리글/바닥글
require("html.php");
//데이터 액세스 라이브러리 클래스
require ("bug_data.php")
echo site_header("페이지 제목")
echo "
버그 업데이트
" ; 🎜>if (bug_data_update($field1,$field2,$field3)) {
echo "
업데이트 실패!
"
} else {
echo "
버그 업데이트 성공
";
//전역 오류 문자열 표시
echo $feedback;
}
echo site_footer();
?>
데이터 액세스 라이브러리 예시
/ **
* 업데이트 데이터베이스의 버그 제어
* 데이터 유효성과 보안을 확인하고 성공하면 true를 반환하고,
* 실패하면 false를 반환합니다.
*
*
*/
function bug_data_update ($field1,$field2,$field3) {
//전역 문자열, 오류 반환
전역 $feedback
//$ field1 및 $field2;
if (!$field1 || !$field2) {
$feedback="필드 1 및 필드 2가 필수";
return false
}
//확인 사용자는
if (!user_isadmin()) {
$feedback="You Must Be An Admin To Update a Bug"
return false
}
/를 업데이트할 권한이 있습니다. /이제 버그를 업데이트할 수 있습니다
$result=db_query("UPDATE bug ".
"SET field2='$field2',".
"field3='$field3' ".
" WHERE ");
//이제 명령문이 성공적으로 실행되었는지 확인하세요
if (!$result) {
//update failed
return false;
} else {
return 사실 ;
}
}
?> 수정하기 쉬움
물론 전체 애플리케이션에서 절대 URL을 사용하지는 않지만 한 단계 더 나아가 색상, 요소 이름, 글꼴 및 기타 가능한 옵션의 선택은 기껏해야 절대적이어서는 안 됩니다. 구성 파일의 설정에 있어야 하며 모든 페이지에 해당 파일을 포함해야 합니다. 사이트의 스타일도 자체 포함되어야 합니다. 따라서 모든 페이지에 복사하여 붙여넣을 필요가 없습니다. 저는 일반적으로 필요할 때 호출할 수 있는 함수에 HTML을 넣습니다.
데이터베이스 비밀번호, 데이터베이스 연결 등도 데이터베이스 추상화 계층에 배치됩니다.
4.객체 지향/함수
프로세스 처리를 여러 함수 호출로 나눌 수 있습니다. 각 호출은 한 가지 작업을 수행하며 때로는 다른 함수를 호출하고 결과를 반환해야 하는 경우도 있습니다.
모든 페이지에서 사용자의 로그인 여부를 확인하는 것이 좋은 예입니다. 개체나 함수를 사용하지 않는 경우 인증 시스템이 변경되면 라이브러리에서 함수 호출만 변경하는 것이 아니라 각 페이지에서 변경해야 합니다. 코드를 작성하기 전에 생각해 보십시오. 해당 코드가 사이트에서 두 번 이상 사용된다면 라이브러리로 옮겨야 합니다. 추가할 내용이 있나요?
제가 생각하지 못한 부분도 있을 것 같은데, 여러분의 생각을 들려주세요. 특히, 크고 복잡한 애플리케이션을 작성했다면 어떤 시스템을 구축할 것인지, 다시 작성해야 한다면 어떤 변경 사항을 적용할 것인지 알고 싶습니다.
위 내용은 소프트웨어 아키텍처를 포함하여 PHP에서 스마트 아키텍처의 사용과 소프트웨어 아키텍처를 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.