我有一个新的应用程序,我需要在本地(局域网)和Web上分发它。 但是,我需要在两种环境中保持性能的安全性和质量。
起初,我想:
所以我想我会在类库,数据访问,接口/合同层和中间层中分离我的应用程序层。 应用程序将在直接使用DAL或WebService进行选择的中间层。
所以,我有:
模型层:
using System.Runtime.Serialization;
namespace Model
{
[DataContract]
public class Car
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Name { get; set; }
}
}
接口/合同层:
using System.ServiceModel;
namespace Contracts
{
[ServiceContract]
public interface ICarContract
{
[OperationContract]
Model.Car Get(int carId);
}
}
数据访问层(DAL):
using System.Linq;
namespace DAL
{
public class CarRepository : Contracts.ICarContract
{
public Model.Car Get(int carId)
{
var ctx = new Context();
try
{
return ctx.Cars.First(x=>x.Id == carId);
}
finally
{
ctx.Dispose();
}
}
}
}
using System.Data.Entity;
namespace DAL
{
public class Context : DbContext
{
public DbSet<Model.Car> Cars { get; set; }
}
}
WebService,在IIS中托管的WCF WebService中:
using System;
namespace WSL
{
public class CarService : Contracts.ICarContract
{
public Model.Car Get(int carId)
{
return new DAL.CarRepository().Get(carId);;
}
}
}
WinForms应用程序:
using System;
using System.Windows.Forms;
namespace WFApp
{
public partial class TestForm : Form
{
public TestForm()
{
InitializeComponent();
}
private void GetButtom_Click(object sender, EventArgs e)
{
int carId = Convert.ToInt32(carIdTextBox.Text);
var rep = new IntermediateLayer.Car();
var car = rep.Get(carId);
carNameTextBox.Text = car.Name;
}
}
}
最后,中间层:
using System;
namespace IntermediateLayer
{
public class Car : Contracts.ICarContract
{
public Model.Car Get(int carId)
{
?????
}
}
}
嗯,这一切都是为了表明希望保持表现层/视图/表格,改变中间层。
我的问题是:这可能吗?怎么做到这个? 这是一个好习惯吗?没有?你怎么建议我解决这个问题?非常感谢!