这篇文章http://www.theserverside.net/tt/articles/showarticle.tss?id=Top5WSMistakes 鼓励我为业务逻辑层创建Web服务,但很多人在数据访问层中使用它.
我想创建一个项目,我想从桌面应用程序,网站和手机访问相同的数据存储库.你会推荐我什么?
在任何情况下,为两个层实现Web服务可能是个好主意吗?
我正在开发一个主要在asp.net开发的医疗保健应用程序,Oracle 11g作为后端.在当前状态下,应用程序分为3层,即UI,BLL和DAL.由于BLL和DAL是类库项目,因此它们被部署为单个dll(一个用于BLL,另一个用于DAL).最近,该软件被审查了另一位开发人员,他提出了将整个软件划分为单独模块的建议,每个模块都有自己的项目和数据库,即库存模块作为InventoryUI(asp.net Web应用程序项目,InventoryBLL(类库项目)和InventoryDAL(类库项目).所有模块获得三个不同的项目,其中单独的数据库通过Web服务相互通信.
所以我的问题是
任何链接,建议都非常欢迎.
我们有一个场景,我们使用 Enterprise Library Data 包来满足我们的数据访问需求。我们实现了一个通用数据读取器来将我们的数据合并到业务对象中。然而,我们正在寻找一种更有效的方法来做到这一点,这也将满足对象内子集合的深度复制,而无需使用反射,因为我们正在处理大量数据。通用数据读取器在处理大量数据时也表现不佳。我知道如果我们使用 EF,它可以解决这个问题,但我们还没有达到可以替换整个数据访问层的阶段。是否有替代方案或行业标准来实现这一目标?
c# performance entity-framework data-access-layer idatareader
我有一个实体 ID,想通过存储库获取实体对象,目前我们这样做
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('id', $propertyId));
$property = $this->propertyGroupOptionRepository->search(
$criteria,
$this->context
)->first();
if($property) {
return $property->get('groupId');
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法,比如 Laravel 的find方法?
我即将重新开始在.NET 3.5sp1中重写VB6应用程序.VB6应用程序写得很好,数据层完全基于存储过程.我想使用像Linq2SQL/Entity Framework/NHibernate/SubSonic这样自动化的东西.不可否认,除了一次性项目之外,我还没有使用过任何这些工具.
我担心所有这些选择可能带来的潜在问题是速度.例如,现在要检索单行(或整个列表),我使用以下sproc:
ALTER PROCEDURE [dbo].[lst_Customers]
@intID INT = NULL
,@chvName VARCHAR(100) = NULL
AS
SELECT Customer_id, Name
FROM dbo.Customer
WHERE (@intID IS NULL OR @intID = Customer_id)
AND (@chvName IS NULL OR Name like ('%' + @chvName + '%'))
ORDER BY name
Run Code Online (Sandbox Code Playgroud)
要在Linq2SQL/Entity Framework/NHibernate/SubSonic中检索单行,这些解决方案是否必须将整个列表下载到客户端并找到我需要的行?
那么,对于具有大型数据域的应用程序,数据访问策略的共识是什么?
因此,我理解它具有良好的松散耦合,我应该能够在应用程序根目录中使用几行代码替换我的DAL.
我有2个DAL编写,Linq-to-sql和一个JSon文件存储库(用于测试,因为我想试用System.Web.Scripting.JavascriptSerializer).
linq to sql将创建实体而不是我的商业模式.并通过在应用程序根目录中使用构造函数注入的IRepository向上提供它们.
我的JSon层没有任何自动生成的类可以反序列化,所以我迷失了一个简单的方法,让它依赖于接口或抽象类,仍然是函数.
这个问题基于以下假设/理解:
因此,为了满足所有灵活性/敏捷性目标,我需要为每个应用程序域/业务对象提供一个接口,一个业务逻辑可以存在的具体类,以及实现该接口的DAL对象(这意味着不自动生成实体的层)必须是手工编码纯复制).
如何在没有大量重复和DRY损失的情况下使用松耦合?
我正在构建我的Web应用程序以连接db.到目前为止,我已设法处理它,(虽然我没有建立BLL和DAL).
我有一个表"id"列.我知道有一种方法可以在SQL Server中声明它自动递增.(但我不想要它).
我想声明一个将保存该值的全局应用程序变量.
我有两个问题:
我是怎么声明的?
我在哪里创建并初始化它?(我有几个登录页面).
谢谢!
PS
如果有人告诉我如何使用我的存储过程构建DAL会有所帮助?为了我需要你使用BLL,我不能在DAL做?
[使用:C#3.5 + SQL Server 2005]
我在Business Layer中有一些代码,它们在TransactionScope中包含订单的创建及其详细信息:
DAL.DAL_OrdenDeCompra dalOrdenDeCompra = new GOA.DAL.DAL_OrdenDeCompra();
DAL.DAL_ItemDeUnaOrden dalItemDeUnaOrden = new GOA.DAL.DAL_ItemDeUnaOrden();
using (TransactionScope transaccion = new TransactionScope())
{
//Insertion of the order
orden.Id = dalOrdenDeCompra.InsertarOrdenDeCompra(orden.NumeroOrden, orden.PuntoDeEntregaParaLaOrden.Id, (int)orden.TipoDeCompra, orden.FechaOrden, orden.Observaciones);
foreach (ItemDeUnaOrden item in orden.Items)
{
//Insertion of each one of its items.
dalItemDeUnaOrden.InsertarItemDeUnaOrden(orden.Id, item.CodigoProductoAudifarma, item.CodigoProductoJanssen, item.CodigoEAN13, item.Descripcion, item.CantidadOriginal, item.ValorUnitario);
}
transaccion.Complete();
}
return true;
Run Code Online (Sandbox Code Playgroud)
以下是执行插入的DAL代码:
public int InsertarOrdenDeCompra(string pNumeroOrden, int pPuntoEntregaId, int pTipoDeCompra, DateTime pFechaOrden, string pObservaciones)
{
try
{
DataTable dataTable = new …Run Code Online (Sandbox Code Playgroud) 我在WPF中开始一个新的应用程序,我希望它有一个良好的架构,以便它可以维护.我正在使用实体框架,到目前为止我计划的是.
•查看图层:一个项目(启动),包含启动视图和主菜单.每种类型的视图都有不同的项目,例如,如果我有与Books相关的视图,那么我将有一个名为BooksView的项目,其中包含所有视图.
•业务层:每种业务类的一个项目,例如BusinessBooks.每个人都有一个具有特定操作的存储库和任何帮助器,如果需要可以进行计算.
•数据访问层:它包含一个名为Entity Framework的文件夹,其中包含DBContext和T4生成的类以及一个名为ContextCreator的类,其中包含以下代码:
public class ContextCreator : IDisposable
{
private MesaOperativaDB context;
public ContextCreator()
{
context = new MesaOperativaDB();
}
public MesaOperativaDB getContext()
{
return context;
}
public void Dispose()
{
context.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,视图将使用所需的业务层的任何项目的静态存储库,并且此存储库将使用上面的类来获取DBContext并使用它如下所示:
public static List<Novedades> GetNovedades()
{
using (ContextCreator db = new ContextCreator())
{
IQueryable<Novedades> novedades = db.getContext().Set<Novedades>().AsQueryable();
return novedades.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
这种做法有什么好处吗?提前谢谢你们.
我已经在使用DTO通过网络进行数据传输。现在,我还将不同的DTO类引入DAL。这是为了避免跨层传递应用程序(业务)对象。
为避免命名混乱,我想使用DTO以外的其他术语,但找不到一个好的术语。
从DAL返回的对象的DTO等价术语是什么?
c# ×3
architecture ×2
bll ×2
.net ×1
asp.net ×1
asp.net-mvc ×1
dry ×1
dto ×1
idatareader ×1
legacy ×1
performance ×1
shopware ×1
sql-server ×1
transactions ×1
vb6 ×1
web-services ×1
wpf ×1