目前我正在设计我的学位项目.几天前我开始学习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)
以上方法调用序列是否正常?
我有一个数据访问层,它为数据库中的每个表都有单独的类.每个类都创建引用表中一行的对象,它们具有创建,更新,删除和获取功能.它们都扩展了DBObj类.我的问题是,我想写一个查询SELECT * FROM table,并在函数中有这个.把它放在哪里最好的地方?在业务层或组中各自的数据层类中的所有相关函数?如果重要的话,它使用MySQL.
在三层体系结构中,有表示/ Web层,服务层和数据库层。但是,在我最近从事的项目中,我看到了对我来说是新的Manager层。您能否解释一下服务层/类与管理器层/类之间的区别?
还请提出一些用于学习3层体系结构和相关模式的好书。(对于Java / Java EE应用程序)
我过去几天都在搜索如何在2层使用CouchDB,我没有找到一个记录正确且有用的资源(我认为Doctrine的CouchDB ODM看起来很模糊),所以问题是:你好吗?在您的应用中使用CouchDB,模糊对用户的访问?我真的认为在第一层使用CouchDB是不明智的!我在Packagist上找到了一些软件包,但几乎没有关于用法的文档.
我有一个应用程序,它被打包为部署在WebSphere 上的单个ear 文件。在包内,代码被组织为 UI 文件、业务逻辑文件和数据库相关文件。现在,这是一个单体应用程序还是一个三层架构?
有什么不同?
我的教授说,在BLL中添加多个层将使3层成为n层架构.
但根据我的理解(我可能是错的),层是物理分离,层是逻辑分离,因此添加多个层仍然会使它成为3层应用程序,不是吗?
在 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#程序员在使用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)
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)
我正在研究 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 层架构。
任何帮助将不胜感激。
我开始使用洋葱架构,因为我对以前的项目结构不满意。我的主要问题是,我可以从数据访问层返回 DTO 吗?
这是我当前的结构:
/Core
- Application
- Domain
/Infrastructure
- Persistence
- Identity
/WebApi
- WebApi
Run Code Online (Sandbox Code Playgroud)
快速解释:
数据流程如下:
Client <- WebApi Layer <- (DTO) Application Layer <- (Entity) Persistence Layer
Run Code Online (Sandbox Code Playgroud)
截至目前,持久层返回在域层中定义的实际数据库实体,应用程序层将其转换为 DTO。
我的问题是,持久层实际上经常需要执行不同的查询,这将使类型与实体类型不同。例如,我可以连接不同的表、应用分组等。因此,我无法返回实体类型。
我是否可以从持久层(数据访问层)返回 DTO?如果是,我在哪里定义这些 DTO?将它们与应用程序层中的其他 DTO 一起定义并在持久层中使用这些 DTO 会使其依赖于应用程序层(我认为这不是很好,因为我们希望最大限度地减少耦合)。另一种选择是在域层中与实体一起创建它们(可能是更好的方法)?为了保持一致性,我应该只从应用程序层返回 DTO,还是可以同时返回实体类型和 DTO?
很多问题我都找不到。只是想成为一名更好的程序员:)
这是我在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) 我正在努力将我的一页转换为3层.
我相信优点是它更有条理.
我现在感到困惑,因为我现在有3层,我意识到我对3层是什么并不清楚.
这就是我所知道或认为我所知道的
Data Access Layer =获取所有连接/值
业务访问层=从DAL运行这些连接和值.不确定,但在这里检查错误?
表现层=这是我更困惑的地方......这部分叫出BAL?如果这是真的,为什么有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) 3-tier ×13
c# ×6
architecture ×3
asp.net-core ×2
php ×2
.net-3.5 ×1
asp.net ×1
c#-3.0 ×1
couchdb ×1
data-layers ×1
for-loop ×1
java-ee ×1
laravel ×1
linq ×1