标签: 3-tier

LINQ与3层

目前我正在设计我的学位项目.几天前我开始学习LINQ.我发现它很有意思并计划在我的项目中使用它,但现在我在某些方面感到困惑.

当我添加LINQ to SQL类时,它会自动为数据库中的每个表生成实体类.

假设我在数据库中有两个表:

用户
项目
UserProjects(联合表)

以及表示哪个用户与哪个项目相关联的联合表.

LINQ to SQL类自动为我生成这三个类.现在我应该创建单独的(用户和项目)类作为业务对象还是使用这些自动生成的实体?

此外,要使用数据库功能,我们需要使用3层架构.我可以直接从我的BLL调用LINQ DAL方法,还是需要创建单独的DAL,它将调用LINQ DAL的方法?

class UserBLL

{
    public void saveUser(String username, String password)
    {
         // here I am calling LINQ DAL from by BLL
         UserDataContext db = new UserDataContext();
         User u =new User {Username = username, Password = password};
        db.user.InsertOnSubmit(u);
       db.SubmitChanges();
    }

}
Run Code Online (Sandbox Code Playgroud)

以上方法调用序列是否正常?

linq 3-tier .net-3.5 c#-3.0

2
推荐指数
1
解决办法
1898
查看次数

业务层,数据层,放置查询的位置?

我有一个数据访问层,它为数据库中的每个表都有单独的类.每个类都创建引用表中一行的对象,它们具有创建,更新,删除和获取功能.它们都扩展了DBObj类.我的问题是,我想写一个查询SELECT * FROM table,并在函数中有这个.把它放在哪里最好的地方?在业务层或组中各自的数据层类中的所有相关函数?如果重要的话,它使用MySQL.

php 3-tier data-layers

2
推荐指数
1
解决办法
1677
查看次数

经理层与服务层

在三层体系结构中,有表示/ Web层,服务层和数据库层。但是,在我最近从事的项目中,我看到了对我来说是新的Manager层。您能否解释一下服务层/类与管理器层/类之间的区别?

还请提出一些用于学习3层体系结构和相关模式的好书。(对于Java / Java EE应用程序)

3-tier java-ee service-layer

2
推荐指数
1
解决办法
4887
查看次数

在3层应用程序中使用CouchDB和Laravel 4

我过去几天都在搜索如何在2层使用CouchDB,我没有找到一个记录正确且有用的资源(我认为Doctrine的CouchDB ODM看起来很模糊),所以问题是:你好吗?在您的应用中使用CouchDB,模糊对用户的访问?我真的认为在第一层使用CouchDB是不明智的!我在Packagist上找到了一些软件包,但几乎没有关于用法的文档.

couchdb 3-tier laravel

2
推荐指数
1
解决办法
1899
查看次数

单体架构和三层架构有什么区别?

我有一个应用程序,它被打包为部署在WebSphere 上的单个ear 文件。在包内,代码被组织为 UI 文件、业务逻辑文件和数据库相关文件。现在,这是一个单体应用程序还是一个三层架构?

有什么不同?

architecture 3-tier amazon-web-services microservices

2
推荐指数
1
解决办法
4085
查看次数

3层和n层架构之间的区别

我的教授说,在BLL中添加多个层将使3层成为n层架构.

但根据我的理解(我可能是错的),层是物理分离,层是逻辑分离,因此添加多个层仍然会使它成为3层应用程序,不是吗?

architecture 3-tier n-tier-architecture

1
推荐指数
1
解决办法
5131
查看次数

如何将业务逻辑封装在业务实体上?

在 3 层应用程序中,我使用我的业务实体dbSets在我的dbContext.

在业务层:

public class User
{ 
   string name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

在数据层:

public context:DbContext
{
  public DbSet<User> Users {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

那么我的问题是如何封装实体上的逻辑?我可以使用扩展方法,但我还想要一些属性,并且我不希望它们泄漏到域层之外。

c# entity-framework 3-tier

1
推荐指数
1
解决办法
1207
查看次数

为什么我们需要在 C# 中 UI、业务和数据访问之间的接口

我在很多地方看到c#程序员在使用3-tire架构时,往往会在每一层之间使用接口。例如,如果解决方案是这样的

SampleUI
Sample.Business.Interface
Sample.Business
Sample.DataAccess.Interface
Sample.DataAccess
Run Code Online (Sandbox Code Playgroud)

这里UI通过接口调用业务层,业务调用数据访问的方式相同。如果这种方法是为了减少层之间的依赖关系,它已经与类库一起使用,无需额外使用接口。代码示例如下,

样品.业务

public class SampleBusiness{
   ISampleDataAccess dataAccess = Factory.GetInstance<SampleDataAccess>();
   dataAccess.GetSampledata();
}
Run Code Online (Sandbox Code Playgroud)

示例.DataAccess.Interface

public interface IsampleDataAccess{
   string GetSampleData();
}
Run Code Online (Sandbox Code Playgroud)

示例.数据访问

public class SampleDataAccess:ISampleDataAccess{
  public string GetSampleData(){
     returns data;// data from database
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 这种介于两者之间的推理有什么好的工作吗?
  2. 如果我使用 newSampleDataAccess().SampleData() 并删除完整的接口类库会怎样?

c# 3-tier n-tier-architecture

1
推荐指数
1
解决办法
941
查看次数

在 DotNet Core 2.2 Web API C# 中创建 3 层架构

我正在研究 Web API Core 2.2,需要设计 3 层架构。我该怎么做。

我的项目结构如下

在此处输入图片说明

在 Web API 项目中..

public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<HrmsDbContext>(opt =>
              opt.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
Run Code Online (Sandbox Code Playgroud)

在 DAL(图书馆项目,我制作了我的 DBContext 并提供了如下所示的连接字符串。

在此处输入图片说明

有没有更好的方法让我没有在两个地方提供连接字符串?并以良好的方式编写 3 层架构。

任何帮助将不胜感激。

c# design-patterns 3-tier asp.net-core asp.net-core-webapi

1
推荐指数
1
解决办法
3897
查看次数

我可以从 DAL 返回 DTO吗

我开始使用洋葱架构,因为我对以前的项目结构不满意。我的主要问题是,我可以从数据访问层返回 DTO 吗?

这是我当前的结构:

/Core
 - Application
 - Domain
/Infrastructure
 - Persistence
 - Identity
/WebApi
 - WebApi
Run Code Online (Sandbox Code Playgroud)

快速解释:

  • 应用程序层是我所有业务逻辑的地方
  • 领域层是定义所有实体/模型的地方
  • 持久层是我查询数据库的地方
  • 身份层用于用户管理
  • WebApi 层是我拥有控制器的地方

数据流程如下:

Client <- WebApi Layer <- (DTO) Application Layer <- (Entity) Persistence Layer
Run Code Online (Sandbox Code Playgroud)

截至目前,持久层返回在域层中定义的实际数据库实体,应用程序层将其转换为 DTO。

我的问题是,持久层实际上经常需要执行不同的查询,这将使类型与实体类型不同。例如,我可以连接不同的表、应用分组等。因此,我无法返回实体类型。

我是否可以从持久层(数据访问层)返回 DTO?如果是,我在哪里定义这些 DTO?将它们与应用程序层中的其他 DTO 一起定义并在持久层中使用这些 DTO 会使其依赖于应用程序层(我认为这不是很好,因为我们希望最大限度地减少耦合)。另一种选择是在域层中与实体一起创建它们(可能是更好的方法)?为了保持一致性,我应该只从应用程序层返回 DTO,还是可以同时返回实体类型和 DTO?

很多问题我都找不到。只是想成为一名更好的程序员:)

c# architecture 3-tier onion-architecture asp.net-core

1
推荐指数
1
解决办法
505
查看次数

PHP中的循环/数组问题很奇怪

这是我在StackOverflow上的第一个问题,坦率地说,我对PHP很新.只是为了给你一个简短的提醒;)

我正在构建一个基于OOP的网站,采用3层架构.在我的数据抽象层中,我有一个名为DbAdapter的对象,它包含与数据库通信所需的所有功能.其中一个函数如下:read($ sql),它接受SQL查询并将结果存储在二维数组中.

为此,它使用两个嵌套的for循环(一个用于行,一个用于每行的列).虽然迭代器$ i像往常一样递增,但不知何故,数组的最后一个元素被覆盖了.

我完全不知道这是怎么可能的,所以我犯的错误一定是非常愚蠢的.

有人在乎帮助新手吗?

先谢谢你,山姆

public $loadedRows;
public function read($sql)
{
    if ($this->connect())
    {
        $result = mysql_query($sql);
        if ($result)
        {
            $totalRows = mysql_num_rows($result);
            $totalFields = mysql_num_fields($result);

            for ($i = 0; $i < $totalRows; $i++)
            {
                for ($j = 0; $j < $totalFields; $j++)
                {
                    $fieldName = mysql_field_name($result, $j);
                    $loadedFields["$fieldName"] = mysql_result($result, $i, $fieldName);
                }

                $this->loadedRows[i] = $loadedFields;
            }

            $this->closeConnection();
            return $this->loadedRows;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

php for-loop 3-tier multidimensional-array

0
推荐指数
1
解决办法
170
查看次数

3层的简单定义和优势是什么?

我正在努力将我的一页转换为3层.

我相信优点是它更有条理.

我现在感到困惑,因为我现在有3层,我意识到我对3层是什么并不清楚.

这就是我所知道或认为我所知道的

Data Access Layer =获取所有连接/值

业务访问层=从DAL运行这些连接和值.不确定,但在这里检查错误?

表现层=这是我更困惑的地方......这部分叫出BAL?如果这是真的,为什么有3层?

c# asp.net 3-tier

-1
推荐指数
1
解决办法
5192
查看次数

在登录页面3 - 轮胎架构中遇到麻烦

商务访问层:

    public static int login(string userlogin, string pwdlogin)
    {
        SqlConnection con = new SqlConnection();
        con.ConnectionString = GetConnectionString();
        con.Open();
        int id = 0;
        string selectstr = "SELECT UserName, Password FROM Registration WHERE UserName = '" + userlogin.Trim() + "' AND Password = '" + pwdlogin.Trim() + "'";
        SqlCommand cmd = new SqlCommand();
        cmd.CommandText = selectstr;
        cmd.CommandType = System.Data.CommandType.Text;
        cmd.Connection = con;
        id = cmd.ExecuteNonQuery();
        cmd = null;
        con.Close();
        return id;
    }
Run Code Online (Sandbox Code Playgroud)

Login.cs

 protected void Button1_Click(object sender, EventArgs e)
    {
        int id …
Run Code Online (Sandbox Code Playgroud)

c# database-connection 3-tier

-4
推荐指数
1
解决办法
841
查看次数