我们正在开发一个Web应用程序.我们希望可以将我们在此处所做的工作重用于将使用相同数据库的不同应用程序,并使用相同的业务规则来读取和写入所述数据库.
哪种设计更正确
让UI调用Web服务,该服务将使用包含业务逻辑的业务对象,该业务对象将与数据访问层通信.
让UI使用包含业务逻辑的业务对象,该业务逻辑将调用Web服务,然后将与数据访问层进行通信.
让UI用户业务对象包含业务逻辑,该业务逻辑将与数据访问层通信.
web-services business-logic-layer web-applications data-access-layer business-objects
我在尝试从Enterprise Library 5.0运行DAAB时遇到了一些问题.我按照教程按照步骤操作,但是收到错误...
1)下载/安装企业库
2)添加对我需要的块的引用(common/data)
3)进口
Imports Microsoft.Practices.EnterpriseLibrary.Common
Imports Microsoft.Practices.EnterpriseLibrary.Data
Run Code Online (Sandbox Code Playgroud)
4)通过企业库配置软件.我从我的网站打开web.config.然后我单击块,然后单击添加数据设置...填写我的详细信息并保存/关闭
5)然后我(思考设置完成)尝试通过获取数据库的实例
Dim db As Database = DatabaseFactory.CreateDatabase()
Run Code Online (Sandbox Code Playgroud)
6)我编译并收到以下错误:
无法加载文件或程序集"Microsoft.Practices.EnterpriseLibrary.Data,Version = 5.0.414.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35"或其中一个依赖项.定位的程序集的清单定义与程序集引用不匹配.(来自HRESULT的异常:0x80131040)(C:\ site\web.config第4行)
我的web.config的第4行是由配置工具生成的,它是:
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
Run Code Online (Sandbox Code Playgroud)
我错过了必要的步骤吗?我是否按错误的顺序完成了这些步骤?我弄错了吗?
非常感谢你的帮助.
enterprise-library web-config data-access-layer daab enterprise-library-5
如果我有数据访问层(nHibernate),例如一个名为UserProvider的类和一个业务逻辑类UserBl,我是否应该测试他们的方法SaveUser或GetUserById,或者从BL层调用的DA层中的任何其他公共方法.这是一种冗余还是常见做法?
单元测试DA层是常见的,还是属于Integration测试域?在测试期间拥有测试数据库或创建数据库数据是否更好?
任何帮助表示赞赏.
我正在重写一个大网站,需要非常扎实的架构,这里是我的几个问题,请原谅我混合苹果和橙子,也许还有奇异果:)我做了很多研究,最后完全糊涂了.
主要问题:您将采用哪种方法来构建一个预计会以各种方式增长的大型网站?
单个入口点,数据库中的页面数据,通过将GET变量与数据库条目相关联来拉出(?pageid = whatever)
单个入口点,页面数据在单独的文件中,包含基于GET变量(?pageid =包含whatever.php的任何内容)
MVC(好吧,伙计们,我都是为了这个,但是除了检查所有的教程和框架之外无法掌握这个概念,他们是否将"视图"存储在数据库中?从示例中可以看出,如果你有1000页相同的话它们可以由1个模型塑造,但我仍然需要1000个"视图"文件?)
PAC - 这对我来说听起来更合乎逻辑,但没有找到太多资源 - 如果这是一个好方法,你能推荐任何书籍或链接吗?
DAL/DAO/DDD - 在发布问题之前,我通过努力阅读堆栈溢出来了解这些术语.不确定它是否属于此列表
坐下来创建我自己的架构(如果没有人在这里启发我可能会这样做:)
没有提到的东西......
谢谢.
我试图弄清楚我是否正确使用DAO模式,更具体地说,当它到达我的mapper类时,抽象数据库持久性应该是多少.我正在使用PDO作为数据访问抽象对象,但有时我想知道我是否试图过多地抽象查询.
我刚刚介绍了如何抽象选择查询,但我已经为所有CRUD操作编写了方法.
class DaoPDO {
function __construct() {
// connection settings
$this->db_host = '';
$this->db_user = '';
$this->db_pass = '';
$this->db_name = '';
}
function __destruct() {
// close connections when the object is destroyed
$this->dbh = null;
}
function db_connect() {
try {
/**
* connects to the database -
* the last line makes a persistent connection, which
* caches the connection instead of closing it
*/
$dbh = new PDO("mysql:host=$this->db_host;dbname=$this->db_name",
$this->db_user, $this->db_pass,
array(PDO::ATTR_PERSISTENT => true));
return $dbh; …Run Code Online (Sandbox Code Playgroud) 我记得读过那个将低级调用抽象为数据无关框架(例如,ExecuteCommand方法等),而另一个通常包含业务特定方法(例如,UpdateCustomer).
它是否正确?哪个是哪个?
我是单元测试的新手.但是我如何对使用Entity Framework编写的DAL进行单元测试,这样我就可以确保我的DAL代码工作正常但实际上没有触及数据库?有人可以尽可能多地提供详细信息.
我可以使用哪些数据访问体系结构与Raven DB一起使用?
基本上,我想通过接口分离持久性,所以我不会将下划线存储暴露给上层.即我不希望我的域看到来自Raven DB的IDocumentStore或IDocumentSession.
我已经实现了通用存储库模式,这似乎有效.但是,我不确定这是否是正确的方法.也许我会去命令查询隔离或其他什么?
你的想法是什么?
我已经看到了一些想法,而不是像创建,更新,插入,删除(CRUD)使用Get和Put.非常好.但是,我还没有看到如何处理复杂性.我被告知,"只需为您需要的每种查询类型编写一个方法".
在我开始考虑限定符(where子句)之前,大多数NOSQL似乎都没问题 - 可能会有很多变化.是否已经有一个很好的方案,以合理的方式实现限定符,只使用方法名称和参数约定?也许有某种动词/名词方案运作良好,但它本身并不是一种语言.
我不是在回答"正确"的答案......我希望我能从中学到一些思想流派.
发现RavenDB制造商的这篇博文:http://ayende.com/blog/4562/ravendb-index-management
我们可以在一个类上实现多个索引吗?
我甚至发现,有可能要序列化匿名委托http://blogs.microsoft.co.il/blogs/aviwortzel/archive/2008/06/20/how-to-serialize-anonymous-delegates.aspx 我想,如果这是可能的,他们可能会使用这样的东西.
但是,如果我们无法访问相同的程序集(例如Silverlight),该怎么办?在这里发现这篇文章:http: //ayende.com/blog/4766/accessing-ravendb-from-silverlight
IEnumerable<T>对象是客户端还是服务器端搜索的?在通过网络发送结果集之前,我们如何通过NOSQL来缩小结果集,而不将其锁定为一个唯一ID?
更新:我最终通过RavenDB向Ayende发送电子邮件.他善意回答了我的问题(如下):
你能做的就是写:
public IEnumerable<T> FindAll(Expression<Func<T,bool>> whereClause)
{
return session.Query<T>().Where(whereClause).ToList();
}
Run Code Online (Sandbox Code Playgroud)
这使用linq来计算你的意图,然后使用RavenDB的语法将查询发送到服务器.在服务器上,我们分析您的查询,查询优化器检查是否存在可以回答此查询的现有索引,如果没有,它将为您创建临时索引.
如果您足够查询该临时索引,RavenDB将使其永久化.因此,自我优化自己的运作.
您是否从"Silverlight"用例中获得了很大的帮助?
我们完全支持Silverlight.
RavenDB可以处理多个索引服务器端吗?
是.事实上,我们有一些客户有> 500个索引运行没有问题.
来自RavenDB的Ayende的信息结束
在设计的查询语言(即的FindAll /哪里/代表),蒙戈似乎通过JSON ......实现了一点这个http://www.mongodb.org/display/DOCS/Indexes 我希望我能知道更多关于它.
这听起来更接近:http://www.mongodb.org/display/DOCS/MapReduce
序列化在C#中序列化匿名委托的一个有趣的线程.这不是直接相关的...但我只是想稍微深入了解一下,所以我对潜力有了更多了解.
php ×2
unit-testing ×2
.net ×1
architecture ×1
bll ×1
c# ×1
daab ×1
dao ×1
mocking ×1
nosql ×1
pac ×1
ravendb ×1
testing ×1
web-config ×1
web-services ×1