2010-11-22 36 views
1

从.Net到PHP,因为我想探索语言的可能性,我正在努力寻找某种方式来自动生成DAL。在.Net中,我只是使用visual studio生成一个数据模型,但我怎么用PHP和MySQL来做到这一点,所以我不必手工输入所有的类?我目前的PHP IDE是Aptana。用于php的DAL生成器

回答

1

如果你真的想跳进PHP背后的想法,而不是只用PHP编写.NET风格的代码,你需要从.NET的对象,所有方法上移开。

正如你所注意到的,在PHP中自动生成对象并不常见。这意味着问题的解决方案不应该依赖于此。

尝试创建更多通用对象并利用继承来避免对象膨胀。更重要的是尽量少依赖数据传输对象,更多的是创建完整的对象作为工具对象。

你会发现PHP是更加欢乐,如果你从.NET的派头逃脱一起工作的。为了说明这一点,我不认为在5年内我在专业的PHP方面做过工作,对于像army.mil这样的大型项目,我是否曾经觉得需要创建一个完整的DAL完成工作。

我就只是工作最大的项目有每一个携带该民意调查的原始数据的数据库,然后将数据传递到最终对象的方法列表模型类的系统。 (在这种情况下,文章,补上army.mil文章)

目前根本没有必要对模型和PHP的数据之间的另一层。它几乎总是意味着更多的工作没有收获。

他们为什么在.net中有意义有各种各样的原因。其中最重要的是它们可以自动生成,因此几乎没有时间成本。这就是说,当封装在一个框架的范围内时,DAL开始再次有意义。如果你的项目是基础的,我会建议像CodeIgniter这样的框架。 CI包含一个非常好的数据库抽象系统。它放弃了SQL,转而使用转换为您在配置需要中定义的特定数据库的方法。这与DAL的用途相同。您仍然在模型中创建查询,并且仍然需要了解数据库的结构。但尽管.net想让你相信,无论如何,这些仍然是.net DAL的关注点。

然而,要真正让PHP是怎么一回事,你需要减掉框架的派头和自由的工作。 PHP是一种黑客语言。它提供了黑客行为。 (如在你的裤子编程中,不要开裂,都可以,两者都可以)。这就是你需要做的,以了解大惊小怪的内容。

这是一把双刃剑吗?完全。但是,使用代码快速和松散的地方就是PHP自带的地方。有一个原因,它是快速启动创业公司的goto语言。

对不起,在技术上长期和偏离主题的答案。我希望你能原谅我。你说你已经开始使用PHP来理解它的可能性。如果你继续这样 - 你会认为它很脆弱,不准确,笨拙,容易出错;你会错过它在灵活性,可扩展性,黑客能力和精神方面所提供的所有优点。我不希望你错过语言的要点。

+0

谢谢你 - 我真的很感谢这样的帖子。我在DAL寻求的原因是我在PHP中创建了一个REST服务,并且我希望采用我认为是最佳实践的方式,以避免sql注入和其他安全问题,我作为PHP noob可能会创造,明显受到我的.net思维的影响 - 我很乐意为你评论我的项目,也许我应该为此创建一个单独的线程。 – Jakob 2010-11-22 16:12:15

+0

可能会有所帮助。但是,如果您担心的是安全性问题,请尝试使用PHP中的mysqli接口,并确保您绑定参数,并确保尽可能确保数据的正确性。您不需要运行任何基于mysql的字符串转义符,因为这样做会与mysqli的参数绑定一起导致双转义攻击向量。 – DampeS8N 2010-11-22 16:21:36

+0

其他.net到PHP的安全问题:弱类型变量可能会导致奇怪的类型转换行为。尝试在方法/函数中键入提示和/或将其转换为字符串并严格分析它们(昂贵的资源明智的,但确保完整性的最简单的方法) - 另外,不要忘记运行htmlentities()来自您即将输出到浏览器的用户或数据库的任何数据。这可以防止XSS。 – DampeS8N 2010-11-22 16:26:57

3

你可以使用一个ORM像DoctrinePropel

这些特征自动生成模式的类,反之亦然。

如果您需要编写自己的访问层,我会推荐使用PHP Data Objects (PDO),因为它提供了一个很好的面向对象接口和数据库引擎抽象。

2

通常我不会写一个答案,因为你已经有2个了,但是我想给你一些我自己的见解,给出一个事实,即一个.NET和PHP开发人员,并试图利用既:

  • 如果你正在寻找的代码生成功能强大的Visual Studio中,再看看没有更多的,因为在PHP中我还没有找到一个还没有和我一直在寻找多年。 Visual Studio只是“巨大的

  • 据我了解,没有这样的事情,.NET代码风格。我相信大多数PHP框架/应用程序为了“简单”而牺牲了很多,我认为这是不对的。在你创建的任何框架/应用程序中,代码应该是可扩展的,可维护的和可扩展的

  • Propel和Doctrine对数据映射(ORM)非常出色,就像NHibernate或PHP中的实体框架一样,但是记住你需要一个Data访问层和业务访问层,以便可扩展的完全开发的应用程序。

  • 请记住,PHP支持与.NET类似的OO,但在几件事情上有所不同,但很好地开发设计意味着任何语言。

我觉得我的回答已经有点远离原来的问题,但我喜欢给你一个更大的答案,因为像你说的,你想:

...探索 语言的可能性...

而你需要很多意见来形成你自己的。祝你好运,希望我的回答并没有让你感到无聊! :)

PS:如果你喜欢BLL和DAL上使用PHP的更多内容,请查看this article我在我的博客中写道。

+0

我非常感谢你的输入 - 不错的文章,我希望你会写更多的博客帖子。 – Jakob 2010-11-23 17:06:04

+0

感谢您抽出时间阅读本文。林有点bussy现在写一本关于PHP网页开发的书,但我已经有一些草稿。最好的祝福 – 2010-11-24 02:37:03