.Net에서 PHP로 이동하기 때문에 언어의 가능성을 탐색하고 싶기 때문에 DAL을 자동 생성하는 방법을 찾기 위해 고심하고 있습니다. .Net에서 나는 datamodel을 생성하기 위해 Visual Studio를 사용 하겠지만 PHP와 MySQL을 사용하여 어떻게 할 수 있습니까? 그래서 모든 클래스를 손으로 입력 할 필요가 없습니까? 현재 PHP IDE는 Aptana입니다.PHP 용 DAL 생성자
답변
PHP에서 아이디어를 얻고 PHP에서 .net 스타일의 코드를 작성하지 않고 싶다면 .NET의 Objects-all-over 방법에서 벗어나야합니다.
주목 해 주신 바와 같이 PHP에서는 객체 자동 생성이 일반적이지 않습니다. 이는 문제에 대한 해결책이 이것에 의존해서는 안된다는 것을 의미합니다.
더 일반적인 개체를 만들고 개체가 부풀어 오지 않도록 상속을 사용해보십시오. 또한 데이터 전송 객체에 대한 의존도를 낮추고 완전한 객체 - 도구 객체를 만드는 데 더 많은 노력을 기울입니다.
PHP가 .net 망치질에서 벗어나면 더 많은 기쁨을 누릴 수 있습니다.
관점에서 볼 때, 저는 5 년 동안 army.mil과 같은 대규모 프로젝트에서 전문적으로 PHP 작업을 수행 한 적이 없다고 생각합니다. 전체 DAL을 만들 필요성을 느끼지 않았습니까? 일을 끝내는 것.
내가 연구 한 가장 큰 프로젝트에는 원시 데이터를위한 데이터베이스를 폴링 한 다음 해당 데이터를 최종 개체로 전달하는 메서드 목록을 포함하는 모델 클래스 시스템이 있습니다. (이 경우 army.mil에 대한 기사를 구성하는 기사)
PHP에서는 모델과 데이터 사이에 다른 계층이 필요하지 않습니다. 거의 항상 이득을 얻지 못한 채 더 많은 일을 의미합니다.
.net에서 의미가있는 이유는 다양합니다. 그 중에서도 최소한의 자동 생성이 가능하므로 시간을 낭비 할 필요가 거의 없습니다.
즉, 프레임 워크의 경계 내에 캡슐화되면 DAL이 다시 이해하기 시작합니다. 프로젝트가 기본 프로젝트라면 CodeIgniter와 같은 프레임 워크를 제안 할 것입니다. CI에는 정말 멋진 데이터베이스 추상화 시스템이 포함되어 있습니다. 그것은 SQL이 구성 요구에서 정의한 특정 데이터베이스로 변환하는 메소드를 선호합니다. 이것은 DAL과 같은 목적으로 사용됩니다. 여전히 모델에서 쿼리를 만들고 있지만 여전히 데이터베이스의 구조를 알고 있어야합니다. 그러나 당신이 믿고 싶은 것이 무엇이든지간에, 그것들은 여전히 어쨌든 .net DAL에 대한 관심사입니다.
그러나 실제로 PHP가 무엇인지 알아 보려면 프레임 워크의 덫을 잃고 자유롭게 작업해야합니다. PHP는 해커 언어입니다. 그것은 해킹을 제공합니다. (당신의 바지 프로그래밍에서와 마찬가지로, 크래킹이 아니라, ok, both ..) 그리고 그것은 정말로 당신이 소란이 무엇인지 이해하기 위해해야 할 일입니다.
양날 검입니까? 전적으로. 그러나 코드로 빠르게 빠져 나오는 것은 PHP가 자체적으로 제공하는 부분입니다. 밤늦게까지 떠오르는 신생 기업을위한 goto 언어가 필요한 이유가 있습니다.
오랫동안 기술적으로 주제를 벗어난 답변에 사과드립니다. 네가 나를 용서해주기를 바란다. 당신은 PHP의 가능성을 이해하기 위해 PHP를 사용하기 시작했다. 이 방법을 계속 사용한다면 약하고 부정확하며 오류가 발생하기 쉽습니다. 유연성, 확장 성, 해킹 능력 및 정신에서 제공하는 모든 위대함을 놓치게됩니다. 나는 당신이 언어의 요점을 놓치지 않기를 바란다.
Doctrine 또는 Propel과 같은 ORM을 사용할 수 있습니다.
이 기능은 스키마에서 클래스를 자동 생성하며 그 반대의 경우도 마찬가지입니다.
자신 만의 액세스 레이어를 작성해야하는 경우 좋은 OO 인터페이스와 DB 엔진 추상화를 제공하므로 PHP Data Objects (PDO)을 사용하는 것이 좋습니다.
일반적으로 나는 2를 가지고 있기 때문에 대답을 쓰지는 않겠지 만, 내 자신에 대한 통찰력을 주겠다. 사실, .NET과 PHP 개발자 인 Im을주고, 모두 : PHP에서 내가 하나를 아직 발견하지 않은 내가 년 동안 찾고 있었어요 때문에
당신은 비주얼 스튜디오와 같은 강력한 코드 생성을 원하신다면 더 이상 봐. Visual Studio는 단지 "거대한"
입니다. 제 이해에는 .NET 코드 스타일과 같은 것이 없습니다. 나는 대부분의 PHP 프레임 워크/응용 프로그램이 "단순함"을 위해 많은 것을 희생하고 있다고 생각합니다. 코드는 당신이 buend하는 모든 프레임 워크/어플리케이션에서 확장 가능하고 유지 보수 가능하며 확장 가능해야합니다
Propel과 Doctrine은 PHP에서 NHibernate 나 Entity Framework처럼 데이터 매핑 (ORM)을 위해 미해결이지만 데이터 액세스 레이어 및 비즈니스 액세스 레이어로 확장하여 완벽하게 개발 된 응용 프로그램을 확장 할 수 있습니다.
PHP는 OO를 .NET과 비슷하게 지원하지만 몇 가지 점에서 다르지만 잘 개발 된 디자인은 모든 언어를위한 것입니다.
내 대답은 원래의 질문에서 조금 멀리 간 생각하지만, 당신이 말했듯이, 당신이 원하기 때문에 나는 당신에게 더 큰 대답을 좋아 :
... 탐구 언어의 가능성 ...
그리고 나만의 의견을 제시해야합니다. 행운을 빈다. 내 대답으로 지루함이 사라지지 않았 으면 좋겠다. :)
추신 : PHP를 사용하여 BLL 및 DAL에 대한 자세한 내용을 알고 싶다면 this article을 확인하십시오. 내 블로그에 썼습니다.
의견을 많이 보내 주시면 감사하겠습니다. 좋은 기사, 더 많은 blogposts를 작성하겠습니다. – Jakob
시간을내어 읽어 주셔서 감사합니다. PHP에 관한 웹 개발에 관한 책을 쓰면서 지금은 다소 바쁘다. 그러나 나는 이미 약간의 초안을 가지고있다. 친애하는 –
감사합니다. 정말 감사드립니다. 내가 DAL에서 요구하는 이유는 PHP에서 REST 서비스를 만들고 있기 때문에 SQL injection을 피하고 PHP 놈처럼 다른 보안 문제를 야기 할 수 있다고 생각했던 것입니다. 분명히 내 .net 생각에 영향을 받는다. 나는 내 프로젝트에 대해 언급하는 것을 좋아한다. 아마 이것에 대한 별도의 스레드를 만들어야한다. – Jakob
도움이 될 수 있습니다. 하지만 걱정되는 부분이 보안이라면 PHP에서 mysqli 인터페이스를 사용하고 매개 변수를 바인드하고 데이터가 올바른지 확인하기 위해 적절한주의를 기울 이도록하십시오. mysqli의 매개 변수 바인딩을 사용하면 이중 이스케이프 공격 벡터가 발생할 수 있으므로 mysql 기반 문자열 에스컬레이터를 실행할 필요가 없습니다. – DampeS8N
기타 .net에서 PHP security gotchas : 약한 타입 변수는 이상한 타입 - 시프 팅 동작을 일으킬 수 있습니다. 메소드/함수에서 유형 힌팅을 시도하고/또는 문자열로 바꾸고 매우 엄격하게 구문 분석합니다 (비용이 많이 드는 자원 현명하지만 무결성을 보장하는 가장 쉬운 방법) - 또한 htmlentities()를 on으로 실행하는 것을 잊지 마십시오. 브라우저로 출력하려는 사용자 또는 데이터베이스의 모든 데이터. 이것은 XSS를 방지합니다. – DampeS8N